使用 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"
我有一个名为 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))
不过,我建议使用 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"