如何在while循环中为变量赋值?能否不用c()给Storage赋值?
关于你的R代码问题解答
1. 能不能不用c()给Storage赋值?
当然可以,而且更推荐预先分配向量长度再通过索引赋值,这种方式比循环里反复用c()高效得多。
比如把代码改成这样:
# 预先分配好长度为9的数值向量 Storage <- numeric(9) x <- 1 while(x <= 9){ Storage[x] <- x x <- x + 1 }
之所以推荐这种方式,是因为每次调用c(Storage, x)都会创建一个全新的向量,把原来的元素和新元素复制进去,循环次数多的时候会频繁触发内存分配和数据复制,速度会很慢。预先分配长度就避免了这个问题。
如果不是必须用while循环,甚至可以直接用Storage <- 1:9一步生成目标向量,完全不需要循环。
2. c(Storage, x)的作用是什么?
c()是R里的连接函数(concatenate的缩写),这里的作用是把当前的Storage向量和单个值x拼接成一个新的向量,然后重新赋值给Storage变量。
举个循环过程的例子:
- 第一次循环:Storage是空向量
c(),c(Storage, 1)生成新向量[1],赋值给Storage; - 第二次循环:Storage是
[1],c(Storage, 2)生成[1, 2],再赋值给Storage; - 以此类推,直到x等于9时,最后一次拼接得到
[1,2,...,9],循环结束。
简单说就是每次把x的当前值追加到Storage的末尾,逐步构建出包含1到9的向量。
内容的提问来源于stack exchange,提问作者user19562955
相关产品推荐
相关产品推荐

