我是新来的和R.
问题是Par1(第1人)和第2人(第2人)最初在股票市场分别以400美元和120美元开始。 Par1将以每天10%的速度增加收入,而Par2则以20%/天的速度增加。我想出了如何写出一个循环方程来填补30天的收益。但是,我想使用“while循环和打印命令”来查找Par2增益不再低于标准1的那一天。
总结: Par1起价400美元,每天增加10% Par2从120美元开始,每天增加20%
使用while循环和打印功能,Par2何时会超过Par1。谢谢!!
用于为每个PAR(人)提供30天的每日收益的代码
rm(list=ls()) #removes any lists from the workspace
graphics.off() #clears any graphics
Par1=rep(0,30); #sets vector of 30 zeros
Par1[1]=400 #fill first position with 400
Par2=rep(0,30); #sets vector of 30 zeros
Par2[1]=120 #fill first position with 120
for (n in 2:30) #For time points 2 through 30 (days 2 through 30)
{ #Start loop
Par1[n]=Par1[n-1]*1.10 #Formula that calculates daily gains by 10%
Par2[n]=Par2[n-1]*1.20 #Formula that calculates daily gains by 20%
} #End loop
我需要一个while循环和打印命令来查找Par2> Par1的时间,如下所示:
while (Par2<Par1)
{ "commands"
}
print("day")
非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
为什么需要一个while循环?
floor(log(400/120)/log(1.2/1.1) + 1)
注意:这里的索引是从0开始的,这意味着它们有400美元的初始日期和120美元被认为是第0天。
答案 1 :(得分:1)
运行第一段代码后,在控制台中输入Par2 < Par1
。看到你得到一个逻辑向量。找到逻辑向量的while
不是您想要的。
查看which
命令,从逻辑向量中提取TRUE
值的索引。我想你可能会接近你想要的东西:
> min(which(Par2 > Par1))
[1] 15
另请注意,代码的第一部分不是很像R。我得到了相同的结果,用
替换了整个第一部分Par1 <- 400*(1.10)^(0:29)
Par2 <- 120*(1.20)^(0:29)
您可以使用all.equal
进行验证。这只是使用向量化操作构建变量并避免使用for
的可能方法之一。
答案 2 :(得分:0)
感谢您的建议。我请求“while循环”的原因是因为这是一个类 - 这是作业。我能够弄明白......到目前为止,在学习R时,我的情况往往过于复杂。以下是我的答案:
> rm(list=ls()) #removes any lists from the workspace
> graphics.off() #clears any graphics
> Par1=400 #Sets Par1 at 400
> Par2=120 #Sets Par2 at 120
> day=1 #Begin sumulation on day 1
> while (Par2<Par1) #While Par2 is less than Par1
> { #begins loop
> Par1=Par1*1.10 #Par1 gains 10% per day
> Par2=Par2*1.20 #Par2 gains 20% per day
> day=day+1 #Cycle throuh one day at a time
>} #Closes loop
>print(day) #Output the day that Par2 surpasses Par1