鉴于此代码:
test=matrix(c(1,2,3,4,5,6,7,8,9,10,11,12),4)
splitData=data.frame(first=c(1,3),second=c(2,4))
apply(splitData,1,function (x) {test[x[1]:x[2],]})
我得到了这个矩阵:
[,1] [,2]
[1,] 1 3
[2,] 2 4
[3,] 5 7
[4,] 6 8
[5,] 9 11
[6,] 10 12
为什么我没有得到矩阵列表?
预期结果:
[[1]]
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[[2]]
[,1] [,2] [,3]
[1,] 3 7 11
[2,] 4 8 12
答案 0 :(得分:2)
你可以尝试
do.call(`c`,apply(splitData, 1, function(x) list(test[x,])))
或者
lapply(seq_len(nrow(splitData)), function(i) test[unlist(splitData[i,]),])
来自?apply
如果每次调用'FUN'都会返回长度为'n'的向量,那么'apply' 如果'n>返回维度'c(n,dim(X)[MARGIN])'的数组1。 如果'n'等于'1','apply'如果'MARGIN'有长度则返回一个向量 1和另一个维度'dim(X)[MARGIN]'的数组。如果'n'是 '0',结果长度为0但不一定是'正确' 尺寸。 如果调用'FUN'返回不同长度的向量,'apply' 返回一个长度为'prod(dim(X)[MARGIN])'的列表,其中'dim'设置为 如果长度大于1,则为“MARGIN”。