Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 与“重叠”$&引用;功能_R_Lapply - Fatal编程技术网

R 与“重叠”$&引用;功能

R 与“重叠”$&引用;功能,r,lapply,R,Lapply,我在阅读哈德利的函数指南时,遇到了一个意想不到的问题 假设我有一个模型对象列表 x=1:3;y=3:1; bah <- list(lm(x~y),lm(y~x)) 但是,这些函数返回空值。似乎我没有误用$函数,因为这些功能是有效的: `$`(bah[[1]],i='call') `$`(bah[[1]],call) 不管怎样,我只是在做练习,我很好奇我的错误在哪里。我知道我可以使用匿名函数,但我认为一定有一种方法可以使用类似于我最初的non解决方案的语法。我已经查看了$在?摘录中提到的

我在阅读哈德利的函数指南时,遇到了一个意想不到的问题

假设我有一个模型对象列表

x=1:3;y=3:1; bah <- list(lm(x~y),lm(y~x))
但是,这些函数返回空值。似乎我没有误用
$
函数,因为这些功能是有效的:

`$`(bah[[1]],i='call')
`$`(bah[[1]],call)
不管怎样,我只是在做练习,我很好奇我的错误在哪里。我知道我可以使用匿名函数,但我认为一定有一种方法可以使用类似于我最初的non解决方案的语法。我已经查看了
$
?摘录中提到的位置,但没有看到任何明显的解释

我刚刚意识到这是可行的:

lapply(bah,`[[`,i='call')
还有这个

lapply(bah,function(x)`$`(x,call))

也许这就归结为一些本不需要匿名函数的
lappy
voodoo?我觉得我以前在某处听说过这一点。

这在
?lappy
的“注释”部分(我的重点部分)中有记录:

由于历史原因,
lappy
创建的调用未计算, 并且已经编写了依赖于此的代码(例如
bquote
)。这 表示录制的通话始终采用
FUN(X[[0L]]的形式,
…)
,并将
0L
替换为当前整数索引。这不是 通常是一个问题,但如果
FUN
使用
sys.call
match。如果是使用
调用。这意味着调用基本函数通常更安全
使用包装器,例如
lappy(ll,函数(x)是.numeric(x))
R 2.7.1中要求,以确保
的方法调度为.numeric
正确发生


没有巫毒。“$”函数不计算它的参数,而“[[”计算它的参数。@DWin-请你解释一下,我不明白你的意思,你可以做
ll[[varname]]
ll[['varname']]
它们的含义不同。第一个选项查找
varname
的值。使用
$
只能得到第二个选项,因为它永远不会“伸出”并计算
varname
在封闭环境中可能包含的字符值。@eddi:Note在
的细节章节中,lappy
对这个问题很有意思。@DWin啊,好吧。我想这就回答了这个问题。$是一个原语,所以lappy的行为不正常。谢谢。我还是有点困惑-
$
-这个
lappy(bah,`$`,`call')
函数的调用是什么?显然不是
`$`(bah[[1L]],“call”)
这就是我读那张便条的方式(如果你用
'call'
替换
..
,用
`$`
替换
'FUN
)。
`$`(bah[[1L]],…)
lapply(bah,function(x)`$`(x,call))