我想创建一个带有循环结果的数字向量,例如
> for (i in 1:5) print(i+1)
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
没有'print'的相同表达式什么都不返回
,这似乎很奇怪> for (i in 1:5) i+1
>
有没有人有解释/解决方案?
答案 0 :(得分:6)
这是标准行为 - 当您说要创建数字向量时,
print
不会那样做
for循环中的表达式是原始函数for
来自值部分的?`for`
for,while和repeat无形地返回NULL。 for sets var to last 使用seq的元素,如果长度为零则为NULL。
print
将结果打印到控制台。
for(i in 1:5) i + 1
仅为每次迭代计算i + 1
并且不返回任何内容
如果您要分配内容,请使用<-
分配,或者不太明确assign
您可以使用sapply
来避免显式循环。这(应该)避免增长载体的任何陷阱
results <- sapply(1:5, function(i) { i + 1})
答案 1 :(得分:1)
坦率地说,必须有比这更好的解决方案
loopee <- function(x){
res <- vector(mode = "numeric", length(x))
for (i in 1:x) {res[i] <- i+1}
return(res)}
> loopee(5)
[1] 2 3 4 5 6