【发布时间】:2019-08-19 12:04:56
【问题描述】:
我有一个 data.tables 列表
library(data.table); set.seed(42)
l <- list(data.table(id=1:5, x=rnorm(5)), data.table(id=1:5, x=rnorm(5)))
> l
[[1]]
id x
1: 1 1.3709584
2: 2 -0.5646982
3: 3 0.3631284
4: 4 0.6328626
5: 5 0.4042683
[[2]]
id x
1: 1 -0.10612452
2: 2 1.51152200
3: 3 -0.09465904
4: 4 2.01842371
5: 5 -0.06271410
每个都具有相同的 ID。
我想从每个元素中只提取 ID 3,但不知道这是如何工作的。我想到了lapply(l, ),但不知道如何继续。每个列表元素是否有一个备用变量,比如xx,所以我可以使用lapply(l,subset(xx, id==3))?
【问题讨论】:
-
这工作
lapply(l,function(t) t[which(t$id ==3),] )。对于列表中的每个元素 (t),您需要提取具有id == 3的行。subset也应该可以工作。 -
我明白了!事实上
lapply(l,function(t) t[id==3])也有效!function(t) ...到底是做什么的?我一直看到这个“技巧”,但永远不会猜到这可能是一个解决方案。我知道它介绍了我正在寻找的“句柄”,但我不太明白它的一般作用。 -
将函数
t[which(t$id ==3),](或t[id==3])应用于t的每个值。和for(t in l){print(t[id==3])}一样 -
这是一个anonymous function,它允许您将比单参数函数更复杂的东西传递给
lapply。 -
谢谢!我想我现在已经掌握了窍门。
标签: r list data.table