我试图遍历一个向量列表来制作每个向量中元素的表。最简单的情况是考虑整个向量:
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)? 谢谢!
答案 0 :(得分:0)
好的,刚想出了一种可能的方法,虽然我不明白为什么我在没有-2的情况下运行以下内容时没有出现越界错误:
ls2<-lapply(ls, function(VEC) {
lapply(1:(length(VEC)-2), function(S) {
table(factor(VEC[S:(S+2)], levels = LETTERS[1:5]))
})
})
ls2
$x
$x[[1]]
A B C D E
1 1 0 1 0
$x[[2]]
A B C D E
2 0 0 1 0
$x[[3]]
A B C D E
1 0 0 1 1
$y
$y[[1]]
A B C D E
2 0 0 1 0
$y[[2]]
A B C D E
1 0 0 2 0
$y[[3]]
A B C D E
2 0 0 1 0
$z
$z[[1]]
A B C D E
1 1 1 0 0
$z[[2]]
A B C D E
1 0 1 0 1
$z[[3]]
A B C D E
1 0 0 0 2