我试图了解for循环是如何工作的。我创建了一个如下所示的列表:
> ldf
[[1]] [1] "David_T2.png"
[[2]] [1] "David_T3.png"
[[3]] [1] "COLOn_T2.png"
[[4]] [1] "COLOn_T4.png"
并创建一个这样的循环:
for (i in 1:length(ldf)){
for (j in 2:length(ldf)){
print(ldf[[i]])
print(ldf[[j]])
}
}
但我没有得到预期的结果,我希望它打印第一个,然后是第二个,然后是第三个文件,依此类推;相反,我得到了这个:
[1] "David_T2.png"
[1] "David_T3.png"
[1] "David_T2.png"
[1] "COLOn_T2.png"
[1] "David_T2.png"
[1] "COLOn_T4.png"
[1] "David_T2.png"
我无法理解为什么。
答案 0 :(得分:1)
您只需要一个循环来迭代元素。拥有第二个嵌套循环会导致为列表中每个元素的对执行最内层语句,而不是每个元素执行一次。
此外,没有必要迭代索引;您可以直接迭代列表项:
for (item in ldf) {
message(item)
}
请注意,我在这里使用了message
而不是print
,因为这更合适。
但是,使用lapply
也可以在没有循环的情况下编写:lapply
是一个带另一个函数的函数(此处为print
) ,并在每个元素上调用它:
lapply(ldf, message)