在R中将for循环结果保存为向量

11

我有以下的for循环,它打印从1到10的数字:

for (i in 1:10) {print (i) } 

我该如何将结果保存为向量,而不仅仅是将它们打印到控制台中?

如果我尝试:

my_vector <- for (i in 1:10) {print (i) } 

然后调用my_vector,我得到:

NULL 
3个回答

16

调用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

3
等价于以下代码:sapply(1:10, identity)sapply(1:10, force) 或者 sapply(1:10, "(")。使用 vapply 函数的代码为:vapply(1:10, "(", 1L) - GSee
啊,force 就是我之前想到的。不过那个 "(" 方法确实是新鲜事物。我从来没有想过这样做。 - Rich Scriven
@RichScriven 有没有使用 dplyr 或者 tidyverse 中的任何工具来实现这个的方法?只是作为一个理论问题问一下。 - dre

2

或者

my_vector = c()
for(i in 1:5){my_vector=c(my_vector,i)}
my_vector

0

以下表单也可以使用:

> my_vector = c()
> for(i in 1:5)       my_vector[length(my_vector)+1] = i
> my_vector
[1] 1 2 3 4 5

5
这是在内存中创建一个对象,它是R Inferno中的Circle II。 - GSee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接