【问题标题】:how to loop 1 item per list in a nested loop如何在嵌套循环中为每个列表循环 1 个项目
【发布时间】:2022-01-06 04:12:30
【问题描述】:
number <- 1:4
child <- list("kelvin","john","bri","thorne")
for(x in number) {
  for(y in child) {
    print(paste(x,y))
  }
}

我要打印

1 kelvin
2 john
3 Bri
4 Thorne

【问题讨论】:

  • 你可以cat(paste(number, child), sep = "\n")

标签: r loops


【解决方案1】:

您当前代码的问题是您执行的是双循环而不是单循环。通过使用双循环,您正在为 numberchild 的每个组合执行一个操作 - 而实际上,您只想为这些向量的每对对应对做一件事。

您可以从迭代向量的元素数量开始:

for (i in seq_along(number)) {
  print(paste(number[i], child[i]))
}
[1] "1 kelvin"
[1] "2 john"
[1] "3 bri"
[1] "4 thorne"

如果您想使用x in v 样式,您可以创建一个包含每个孩子的号码和姓名的列表。

people = list(
  list(number = 1, name = "kelvin"),
  list(number = 2, name = "john"),
  list(number = 3, name = "bri"),
  list(number = 4, name = "thorne")
)
for (person in people) {
  print(paste(person$number, person$name))
}
[1] "1 kelvin"
[1] "2 john"
[1] "3 bri"
[1] "4 thorne"

最后,这是一个使用 purrr::pwalk() 的 tidyverse 方式。

library(tidyverse)
people = list(number = number, child = child)
pwalk(people, ~ print(paste(.x, .y)))
[1] "1 kelvin"
[1] "2 john"
[1] "3 bri"
[1] "4 thorne"

在上面,pwalk() 将匿名函数应用于我们新创建的列表people 的每个对应元素对,这正是我们在这里想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    相关资源
    最近更新 更多