编辑:看起来这是一个非常古老的"错误"或实际上,功能.例如,参见这封邮件
我试图了解Python范围规则.更准确地说,我认为我理解它们,但后来我在这里找到了这个代码:
x = "xtop"
y = "ytop"
def func():
    x = "xlocal"
    y = "ylocal"
    class C:
        print(x)
        print(y)
        y = 1
func()
在Python 3.4中,输出是:
xlocal
ytop
如果我用函数替换内部类,那么它合理地给出了UnboundLocalError.你能解释一下为什么它在课堂上表现出这种奇怪的方式吗?选择范围规则的原因是什么?
我想给一个函数提供一个params参数然后附加它,这样我每次引用list元素时都可以使用a而不是params $ a.
run.simulation<-function(model,params){
attach(params)
#
# Use elements of params as parameters in a simulation
detach(params)
}
这有问题吗?如果我已经定义了一个名为c的全局变量,并且还定义了一个名为c的列表"params"的元素,其值将在attach命令之后使用?
我正在尝试使用foreach在R中进行多核计算.
A <-function(....) {
    foreach(i=1:10) %dopar% {
    B()
    }
}
然后我A在控制台中调用函数.问题是我调用一个函数Posdef内B只在其它脚本文件我源中定义.我不得不把Posdef输出参数列表放在foreach:.export=c("Posdef").但是我收到以下错误:
Error in { : task 3 failed - "could not find function "Posdef""
为什么不能找到这个定义的函数?
我正在关注Rbloggers中的一个教程并发现使用双冒号,我在线查看,但我找不到他们使用的解释.这是他们使用的一个例子.
df <- dplyr::data_frame(
  year = c(2015, NA, NA, NA), 
  trt = c("A", NA, "B", NA)
)
我知道它会创建一个数据框,但我不明白它们的用途.
我一直在努力为此寻找答案但却没有这样做.我想知道,实际使用的do-end块是什么?它只是说在我的书中需要时使用值,所以我怎么能用它呢?
我是否通过在do-end循环中放置一个函数并将局部变量放在函数外但在此do-end块内部并且函数可以看到变量来使用它来减少局部变量的范围?但那么功能仍然可以调用吗?
很抱歉非常模糊.我希望这是有道理的.也许一个插图的例子可能有用^^
我的目标是定义一些在dplyr动词中使用的函数,它们使用预定义的变量.这是因为我有一些这些函数带有一堆参数,其中许多参数都是相同的变量名.
我的理解:这很难(也许是不可能的)因为dplyr稍后会懒惰地评估用户指定的变量,但是任何默认参数都不在函数调用中,因此不可见dplyr.
考虑以下示例,我用它dplyr来计算变量是否已更改(在这种情况下相当无意义):
library(dplyr)
mtcars  %>%
  mutate(cyl_change = cyl != lag(cyl))
现在,lag还支持备用排序,如下所示:
mtcars  %>%
  mutate(cyl_change = cyl != lag(cyl, order_by = gear))
但是,如果我想创建自己的版本lag,总是按顺序排序gear呢?
天真的方法是这样的:
lag2 <- function(x, n = 1L, order_by = gear) lag(x, n = n, order_by = order_by)
mtcars %>%
  mutate(cyl_change = cyl != lag2(cyl))
但这显然会引发错误:
没有找到名为'gear'的对象
更现实的选择是这些,但它们也不起作用:
lag2 <- function(x, n = 1L) lag(x, n = n, order_by = ~gear) …#include <stdio.h>
class C
{
   public:
          static int i;
          static int j;
};
int i = 10;
int C::i = 20;
int C::j = i + 1;
int main ()
{
    printf("%d", C::j);
    return 0;
}
价值是什么:C :: j
我正在阅读一个c ++测验,并遇到了以下问题.我认为答案是11.
int C::j = i + 1; 
既然它正在访问非静态i的10?所以,我认为11应该是答案?
我通过visual studio编译并运行了这段代码并打印出来21.这对我来说很困惑.有人可以解释为什么会这样吗?我错过了什么?
我有一个Javascript"类"定义如下:
var Welcomer = function(name) {
  var pName = name;
  var pMessage = function() {
    return "Hi, " + pName + "!";
  };
  return {
    sayHi: function() {
      alert(pMessage());
    }
  };
};
new Welcomer('Sue').sayHi();
有没有办法以Welcomer这样的方式"子类化" 我可以重新定义公共方法并可以访问私有方法和变量?以下内容将允许我访问公共方法,但不允许访问私有方法:
var UnhappyWelcomer = function(name) {
  var pSadMessage = function() {
    // won't work, b/c I don't have access to pMessage
    return pMessage() + " Miserable day, innit?";
  };
  return {
    sayHi: function() {
      alert(pSadMessage());
    }
  };
};
UnhappyWelcomer.prototype = Welcomer(); // failed …这个问题来自一系列其他问题,这些问题都涉及到同样的问题.出于某些奇怪的原因,在第二个函数中找不到第一个函数的局部环境中定义的变量的意义上,在另一个函数中使用函数有时会失败.
伪代码中的经典模式:
ff <- function(x){
    y <- some_value
    some_function(y)
}
ff(x)
eval(expr,envir,enclos)中的错误:找不到对象'y'
首先我认为它与S4方法和那里的范围有关,但它也与其他函数一起发生.我和R开发团队进行了一些互动,但是他们所做的只是让我直接进入错误报告站点(我不得不说,这不是最吸引人的站点).我从来没有得到任何反馈.
随着问题不断出现,我想知道是否有一个逻辑解释.在所有这些情况下是否是一个常见的错误,如果是这样,哪一个?或者它真的是一个错误?
其中一些问题:
PS:我知道R-devel列表,万一你想知道......
我仍然在努力寻找R范围和环境.我希望能够构造简单的辅助函数,这些函数可以从我的'main'函数中调用,这些函数可以直接引用这些主函数中的所有变量 - 但是我不想在每个main函数中定义辅助函数功能.
helpFunction<-function(){
#can I add a line here to alter the environment of this helper function to that of the calling function?
return(importantVar1+1)
}
mainFunction<-function(importantVar1){
return(helpFunction())
}
mainFunction(importantVar1=3) #so this should output 4
scoping ×10
r ×6
function ×2
block ×1
c++ ×1
closures ×1
dplyr ×1
environment ×1
foreach ×1
inheritance ×1
javascript ×1
lazyeval ×1
lua ×1
multicore ×1
namespaces ×1
operators ×1
python ×1
scope ×1