我想创建几个包含0的不同长度的向量。两个向量的长度不同,存储在一个向量kj中。
k <- 12 # nr of vectors which might be changed
kj <- c(17, 2, 12,2,2,7,7,7,7,7,7,7 ) # lenght per vector which might be changed
为了能够快速调整向量的数量和它们各自的长度,我考虑过使用lapply()
或for loop
,但直到现在我还没有找到方法。
differences <- numeric() # starting object for storing vectors
for (i in 1:length(kj)){
vec <- rep(0,kj[i])
differences <- list(differences, vec)
}
给出了一个嵌套的对象和
lapply(0, rep, times = kj)
给出times
是无效参数的错误。我更喜欢一个对象,我可以通过[i]
或[[i]]
访问向量。创建它的最简单和最短的方法是什么?提前感谢,我是R的新手,在这里,希望足够清楚。
结束这个问题:Map(rep, 0, kj) did the trick
lapply
或Map
方法更简单,但这里有另一种使用split
和findInterval
同时生成所有0的方法。
tmp <- rep(0, sum(kj))
split(tmp, findInterval(seq_along(tmp), cumsum(kj), left.open = TRUE))
#$`0`
# [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
#$`1`
#[1] 0 0
#$`2`
# [1] 0 0 0 0 0 0 0 0 0 0 0 0
#$`3`
#[1] 0 0
#$`4`
#[1] 0 0
#$`5`
#[1] 0 0 0 0 0 0 0
#...
#...