我有以下的for循环,它打印从1到10的数字:
for (i in 1:10) {print (i) }
我该如何将结果保存为向量,而不仅仅是将它们打印到控制台中?
如果我尝试:
my_vector <- for (i in 1:10) {print (i) }
然后调用my_vector
,我得到:
NULL
调用print
将始终将每次迭代的结果打印到控制台。如果您保留print
命令,则可能会获得不需要的输出。
您的主要问题是在for
循环之前没有初始化my_vector
。您可以改为执行以下操作,而不会产生print
副作用。
my_vector <- vector("numeric", 10L)
for(i in 1:10) my_vector[i] <- i
my_vector
# [1] 1 2 3 4 5 6 7 8 9 10
但请注意,这与使用sapply
执行以下操作完全相同,但在这种情况下,您不需要声明并且可以将结果分配给向量。
my_vector2 <- sapply(1:10, function(x) x)
my_vector2
# [1] 1 2 3 4 5 6 7 8 9 10
或者
my_vector = c()
for(i in 1:5){my_vector=c(my_vector,i)}
my_vector
以下表单也可以使用:
> my_vector = c()
> for(i in 1:5) my_vector[length(my_vector)+1] = i
> my_vector
[1] 1 2 3 4 5
sapply(1:10, identity)
、sapply(1:10, force)
或者sapply(1:10, "(")
。使用vapply
函数的代码为:vapply(1:10, "(", 1L)
。 - GSeeforce
就是我之前想到的。不过那个"("
方法确实是新鲜事物。我从来没有想过这样做。 - Rich Scrivendplyr
或者tidyverse
中的任何工具来实现这个的方法?只是作为一个理论问题问一下。 - dre