使用“$”功能

我正在通过hadley的函数指南中的一些例子,并遇到一个意想不到的问题。

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

x=1:3;y=3:1; bah <- list(lm(x~y),lm(y~x))

并且想要从每个中提取一些东西(正如哈德利关于名为“试验”的列表所提出的问题)。 我期待其中的一个工作:

lapply(bah,`$`,i='call') # or...
lapply(bah,`$`,call)

但是,这些返回空值。 这似乎是我不滥用$函数,因为这些工作:

`$`(bah[[1]],i='call')
`$`(bah[[1]],call)

无论如何,我只是在做这个练习,并且很好奇我的错误所在。 我知道我可以使用匿名函数,但认为必须有一种方法来使用类似于我最初的非解决方案的语法。 我已经看过$提及的地方了?Extract ,但没有看到任何明显的解释。

我只是意识到这是有效的:

lapply(bah,`[[`,i='call')

和这个

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

也许这只是归结为一些需要匿名功能的lapply巫术, lapply需要这些功能? 我觉得我以前听说过这个地方。


这是记录在?lapply ,在“注”部分(重点我的):

由于历史原因,由lapply创建的调用lapply ,并且编写了代码(例如bquote ),依赖于此。 这意味着记录的调用始终是FUN(X[[0L]], ...) ,其中0L由当前整数索引替换。 这通常不是问题,但如果FUN使用sys.callmatch.call或者它是一个使用该调用的原始函数,则可能是这样。 这意味着使用包装器调用原始函数通常更安全,因此在R 2.7.1中需要lapply(ll, function(x) is.numeric(x))以确保发生is.numeric方法分派正确。

链接地址: http://www.djcxy.com/p/73513.html

上一篇: ing with the "$" function

下一篇: How do I make Karma's auto