【发布时间】:2019-08-12 18:00:53
【问题描述】:
我正在尝试从 For 循环中创建一个数据框,但是在我找到的所有建议中,我只获得了循环的最后一个值,而不是整个结果。
我尝试在循环之前创建一个空列表,一个空的data.frame,矩阵,并在循环中定义了这样的元素,在循环之后再次调用它,但它只取循环的最后一个值。
random_growth <- rnorm(n=10000, mean=0.11, sd=0.3560766)
fcf0 <- 3619
for (i in random_growth){
fcf1= fcf0 *(1+i)
fcf2= fcf1*(1+i)
fcf3= fcf2*(1+i)
fcf4= fcf3*(1+i)
fcf5= fcf4*(1+i)
fcf6= fcf5*(1+i)
ffcfs = c(fcf1,fcf2,fcf3,fcf4,fcf5,fcf6)
print(rbind(ffcfs))
}
我想要一个 6 列和 10.000 行的数据框。我知道我的循环不是进行此类计算的最佳方法,但我没有找到另一种方法。拜托,如果你能帮助我,我会很高兴。
我找到了一种创建数据框的方法,但我尝试在循环内创建不同的 if-else 语句,因为 random_growth 上的某些值可能是负数,如果我执行直接公式,它将不会被应用。所以我想出了这个改变,但不知何故计算是错误的:
random_growth <- rnorm(n=10000, mean=0.11, sd=0.3560766)
fcf0 <- 3619
ffcfs <- data.frame()
for (i in random_growth){
if (i>0){
fcf1= fcf0*(1+i)
fcf2= fcf1*(1+i)
fcf3= fcf2*(1+i)
fcf4= fcf3*(1+i)
fcf5= fcf4*(1+i)
fcf6= fcf5*(1+i)
}
else{
fcf1= if ((fcf0*i)>0){fcf0*(1+i)} else {fcf0-(fcf0*i)}
fcf2= if ((fcf1*i)>0){fcf1*(1+i)} else {fcf1-(fcf1*i)}
fcf3= if ((fcf2*i)>0){fcf2*(1+i)} else {fcf2-(fcf2*i)}
fcf4= if ((fcf3*i)>0){fcf3*(1+i)} else {fcf3-(fcf3*i)}
fcf5= if ((fcf4*i)>0){fcf4*(1+i)} else {fcf4-(fcf4*i)}
fcf6= if ((fcf5*i)>0){fcf5*(1+i)} else {fcf5-(fcf5*i)}
}
row_i = c(fcf1,fcf2,fcf3,fcf4,fcf5,fcf6)
ffcfs = rbind(ffcfs,row_i)
}
您能帮我找出问题所在吗? 非常感谢!!
【问题讨论】:
标签: r loops dataframe for-loop