【问题标题】:Creating several vectors with idiosyncratic length at once in R在 R 中一次创建多个具有特殊长度的向量
【发布时间】:2021-10-17 21:16:12
【问题描述】:

我想创建几个不同长度包含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)
  • 完美运行,非常感谢! :)
  • 在您的lapply 尝试中,我认为您的意思是循环遍历“kj”:lapply(kj, function(x) rep(0, x))
  • 是的,我就是这个意思,谢谢。这是我第一次尝试lapply...

标签: r for-loop vector apply


【解决方案1】:

lapplyMap 方法更简单,但这是另一种使用 splitfindInterval 一次生成所有 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
#...
#...

【讨论】:

  • 感谢您的选择!
【解决方案2】:

只是为了结束这个问题: Map(rep, 0, kj) 成功了

【讨论】:

    猜你喜欢
    • 2020-06-14
    • 2013-05-20
    • 2023-03-17
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    相关资源
    最近更新 更多