【问题标题】:How to make a for loop for each vector in list如何为列表中的每个向量创建一个 for 循环
【发布时间】:2017-10-02 09:14:53
【问题描述】:

我有一个列表l,包含四个向量,每个向量包含多个元素,向量长度不一样。

l<- list(2:4,3:5,4:7,5:7)

  for ( i in length(l)){

     print(l)
   }

[[1]]
[1] 2 3 4

[[2]]
[1] 3 4 5

[[3]]
[1] 4 5 6 7

[[4]]
[1] 5 6 7

我想使用 for 循环将值 2 添加到列表中每个向量的所有元素。
也许我们需要(两个for循环)外部将用于列表,内部将用于列表的每个向量,我想获得以下结果:

    [[1]]
    [1] 4 5 6

    [[2]]
    [1] 5 6 7

    [[3]]
    [1] 6 7 8 9

    [[4]]
    [1] 7 8 9

请注意:原始列表包含389个向量,每个向量包含不少于45个元素。

【问题讨论】:

  • lapply(l, `+`, 2)
  • 谢谢,Sotos 我只想使用 for 循环。
  • 你为什么要这样做? for 循环通常不是 R 中的最佳选择;在这种情况下,使用lapply 是最好的选择
  • 我知道,上面的例子只是为了理解for循环的思想,主要任务包含一些条件,我正在尝试逐步解决任务,这就是为什么我选择了循环。
  • 你也可以通过*apply一步步完成。

标签: r list for-loop vector


【解决方案1】:

一种更快更简洁的方法是不使用循环。在这里,我们将l 中的每个向量.x 映射到.x + 2

purrr::map(l, ~.x + 2)
# [[1]]
# [1] 4 5 6
# 
# [[2]]
# [1] 5 6 7
# 
# [[3]]
# [1] 6 7 8 9
# 
# [[4]]
# [1] 7 8 9

如果你真的需要循环版本,只需循环遍历l 的索引并将每个向量加2即可。

for (i in seq_along(l)) {
  l[[i]] <- l[[i]] + 2
}
print(l)
# [[1]]
# [1] 4 5 6
# 
# [[2]]
# [1] 5 6 7
# 
# [[3]]
# [1] 6 7 8 9
# 
# [[4]]
# [1] 7 8 9

【讨论】:

    猜你喜欢
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2019-08-21
    • 2021-05-12
    • 1970-01-01
    • 2012-05-20
    相关资源
    最近更新 更多