我常常遇到需要为不同变量创建大量类似模型的情况.通常我将它们转储到列表中.以下是虚拟代码的示例:
modlist <- lapply(1:10,function(l) {
   data <- data.frame(Y=rnorm(10),X=rnorm(10))
   lm(Y~.,data=data)
})
现在,以实例为例非常简单:
lapply(modlist,predict)
我有时想做的是从列表中提取一个元素.显而易见的方法是
sapply(modlist,function(l)l$rank)
这样做我想要的,但我想知道是否有更短的方法来获得相同的结果?
koh*_*ske 27
可能这些有点简单:
> z <- list(list(a=1, b=2), list(a=3, b=4))
> sapply(z, `[[`, "b")
[1] 2 4
> sapply(z, get, x="b")
[1] 2 4
你可以定义一个函数:
> `%c%` <- function(x, n)sapply(x, `[[`, n)
> z %c% "b"
[1] 2 4
而这看起来像是一个扩展$:
> `%$%` <- function(x, n) sapply(x, `[[`, as.character(as.list(match.call())$n))
> z%$%b
[1] 2 4
Mar*_*rek 19
我通常使用kohske方式,但这是另一个技巧:
 sapply(modlist, with, rank)
当您需要更多元素时,它会更有用,例如:
 sapply(modlist, with, c(rank, df.residual))
我记得我从hadley那里偷了它(我认为是plyr文档).