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))