我正在尝试从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)
}
您能帮我找出问题所在吗? 非常感谢你!
答案 0 :(得分:1)
您正在运行的循环不断声明或更新ffcfs
向量。
尝试以下方法:
random_growth <- rnorm(n=10000, mean=0.11, sd=0.3560766)
fcf0 <- 3619
ffcfs = data.frame()
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)
row_i = c(fcf1,fcf2,fcf3,fcf4,fcf5,fcf6)
ffcfs = rbind(ffcfs,row_i)
}
这样,第ith行将添加到您的数据框中,而无需为每次迭代创建新的数据框。希望对您有帮助!
答案 1 :(得分:0)
为此不需要循环。这是使用lapply
-
set.seed(2)
random_growth <- rnorm(n=10000, mean=0.11, sd=0.3560766)
df <- data.frame(
setNames(
lapply(1:6, function(x) {
3619*(1 + random_growth)^x
}),
c("fcf1","fcf2","fcf3","fcf4","fcf5","fcf6")
)
)
head(df)
fcf1 fcf2 fcf3 fcf4 fcf5 fcf6
1 2861.289 2262.220 1788.578 1414.1033 1118.0321 883.9494
2 4255.294 5003.462 5883.173 6917.5554 8133.8033 9563.8924
3 6063.253 10158.341 17019.229 28513.9244 47772.0740 80037.0733
4 2560.441 1811.511 1281.644 906.7625 641.5342 453.8852
5 3913.674 4232.342 4576.957 4949.6326 5352.6526 5788.4882
6 4187.732 4845.842 5607.374 6488.5831 7508.2754 8688.2141