使用 for 循环将值添加到向量

Adding values to a vector using for loop

我有一个名为 mylist 的列表,其中包含我试图合并并保存在另一个对象中的字符元素。 下面一段代码:

result <- c()
for (i in length(mylist)) {
  temp <- paste(mylist[[i]][2], mylist[[i]][3], mylist[[i]][4], sep="")
  result[i] <- temp
}
result

结果如下:

 [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA ...

为什么我得到的是 NA 而不是每个 result[i] 的合并字符?

length(myList) 只是一个标量值(即单个值)。您需要像这样添加起始值:1:length(myList)。我猜 myList 中的最后一个值有一些结果?

您的循环仅在 length(myList) 处开始和结束,因为 i 的值始终为 length(myList)。所以,你的循环 "loops" 只有一次。 要更改此设置,您需要指定 i 的开始和结束值。就像是, for (i in 1:length(myList))

and 已经解释了意外结果的原因。

不过,我建议使用 seq_along(mylist),因为它比 1:length(mylist) 更安全,以防 mylist 由于某种原因为空。

result <- c()
for (i in seq_along(mylist)) {
  result[i] <- paste(mylist[[i]][2:4], collapse = "")
}
result
[1] "BCD" "CDE" "DEF" "EFG" "FGH"

如果mylist为空,length(mylist)会变成0,但是1:0.

会执行两次循环

此外,collapse 参数告诉 paste() 连接向量的元素,从而节省大量输入。

顺便说一下,使用sapply():

也可以达到同样的效果
sapply(mylist, function(x) paste(x[2:4], collapse = ""))
[1] "BCD" "CDE" "DEF" "EFG" "FGH"

数据

OP 没有提供可重现的示例,但说他有“一个名为 mylist 的列表,其中包含字符元素”。所以,这里有一些虚构的数据:

mylist <- lapply(1:5, function(i) LETTERS[i + (0:3)])

mylist
[[1]]
[1] "A" "B" "C" "D"

[[2]]
[1] "B" "C" "D" "E"

[[3]]
[1] "C" "D" "E" "F"

[[4]]
[1] "D" "E" "F" "G"

[[5]]
[1] "E" "F" "G" "H"