【发布时间】:2014-05-19 23:15:54
【问题描述】:
我正在尝试遍历向量列表以制作每个向量中的元素表。最简单的情况是考虑整个向量:
ls <- list(x = sample(LETTERS[1:5], 5,replace=T),
y = sample(LETTERS[1:5], 5, replace=T),
z=sample(LETTERS[1:5], 5, replace=T)
)
ls
$x
[1] "B" "A" "D" "A" "E"
$y
[1] "A" "D" "A" "D" "A"
$z
[1] "B" "C" "A" "E" "E"
lapply(ls, function(VEC) {table(factor(VEC, levels = LETTERS[1:5]))})
$x
A B C D E
2 1 0 1 1
$y
A B C D E
3 0 0 2 0
$z
A B C D E
1 1 1 0 2
但是当我尝试制作 VEC 子集的重叠表时,我得到了 zilch:
lapply(ls, function(VEC) {
for (i in 1:3) {
table(factor(VEC[i:(i+2)], levels = LETTERS[1:5]))
}
})
$x
NULL
$y
NULL
$z
NULL
我该怎么做才能为 x、y 和 z 分别获得 3 个表? (来自 VEC 的 1:3、2:4 和 3:5)? 谢谢!
【问题讨论】:
-
使用与基本 R 函数相对应的变量名称通常不是一个好主意。在这种情况下,
ls通常会返回您环境中的所有变量名。 -
另外,您的 for 循环解决方案不起作用,因为 for 循环实际上并没有返回任何内容。你打电话给
table三次,但他们哪儿也不去。你的函数没有返回值。 -
我同意@MrFlick 的观点,尽管 R 能够区分函数和“数据”。这更多的是人类可读性问题。
-
是的,我明白了。谢谢你们!
标签: r list for-loop vector lapply