您当前代码的问题是您执行的是双循环而不是单循环。通过使用双循环,您正在为 number 和 child 的每个组合执行一个操作 - 而实际上,您只想为这些向量的每对对应对做一件事。
您可以从迭代向量的元素数量开始:
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 的每个对应元素对,这正是我们在这里想要的。