-1

我是新来的,也是 R 的。

问题是 Par1(第 1 个人)和 Par2(第 2 个人)最初在股票市场上分别以 400 美元和 120 美元开始。Par1 将以每天 10% 的速度增加收入,而 Par2 每天增加 20%。我想出了如何写出一个循环方程来填补 30 天的收益。但是,我想使用“while 循环和打印命令”来查找 Par2 增益不再小于 Par 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")

任何帮助深表感谢。谢谢!

4

3 回答 3

1

为什么需要一个while循环?

floor(log(400/120)/log(1.2/1.1) + 1)

注意:这里的索引是从 0 开始的,这意味着他们有 400 美元和 120 美元的初始天被认为是第 0 天。

于 2013-09-01T06:15:52.697 回答
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.

于 2013-09-01T06:18:06.957 回答
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
于 2013-09-02T15:52:08.210 回答