首页 > 解决方案 > 我在使用 for 循环创建列表时遇到问题

问题描述

我想在我的代码中有 10 个结果,但我只收到一个。

我试图让变量“数字”表现得像 1、2、3...10,并收到 10 个结果,但我只收到一个。

这就是我到目前为止所尝试的:

one_to_ten <- c(1:10) for (number in one_to_ten) {
     fluxo_div_primeiro <- c(0.68*((1+0.02)^number))
}
fluxo_div_primeiro

实际结果仅为 0.82916,但预期结果为:

#0.6936,    0.707472, 0.72162144, 0.736053869, 0.750774946, 0.765790445,     
#0.781106254,   0.796728379,    0.812662947 0.828916206

标签: rloopsfor-loop

解决方案


问题在于,在循环的每次运行中,对象都会被新输出更新/替换。相反,我们初始化一个相同大小的输出向量,然后用索引“数字”更新每个元素。通常,如果它不是序列,则循环遍历数字序列,但这里它是按序列的,即从 1 到 10。

fluxo_div_primeiro <- numeric(10)
one_to_ten <- c(1:10) 
for (number in one_to_ten) {
   fluxo_div_primeiro[number] <- 0.68*((1+0.02)^number)
   }
fluxo_div_primeiro
#[1] 0.6936000 0.7074720 0.7216214 0.7360539 0.7507749 0.7657904 
#[7] 0.7811063 0.7967284 0.8126629 0.8289162

另一种选择是使用裸向量初始化

fluxo_div_primeiro <- c()

然后通过将值与原始向量连接来更新向量

for (number in one_to_ten) {
   fluxo_div_primeiro <- c(fluxo_div_primeiro, 0.68*((1+0.02)^number))
   }
fluxo_div_primeiro
#[1] 0.6936000 0.7074720 0.7216214 0.7360539 0.7507749 0.7657904 
#[7] 0.7811063 0.7967284 0.8126629 0.8289162

请注意,这些是矢量化的。所以,我们不需要任何循环

(0.68 * (1 + 0.02) ^ (1:10))
#[1] 0.6936000 0.7074720 0.7216214 0.7360539 0.7507749 0.7657904 
#[7] 0.7811063 0.7967284 0.8126629 0.8289162

推荐阅读