在R中,“for循环”的参数

时间:2010-04-18 13:25:02

标签: r

有人可以告诉我下面的R代码有什么问题:

i = 1.001
#make SAV and STO become vector
SAV = c()
STO = c()
#set the initial values for the vector
SAV[1] = 0
STO[1] = 100


for (t in 2:1000) {
if ((price[t]>9.9)&(price[t]<10.1)&(SAV[t-1]!=0))
      SAV[t]=SAV[t-1]*i 
      STO[t]=0 
}

for (t in 2:1000) {
if ((price[t]>9.9)&(price[t]<10.1)&(SAV[t-1]=0))
      STO[t] = STO [t-1]
      SAV[t] = 0
}

SAV
STO

我要做的是找到SAV和STO的载体。

3 个答案:

答案 0 :(得分:3)

我会尝试以下内容。修改它以与程序的逻辑一致

for (t in 2:1000) {
        if ((price[t]>9)&(price[t]<10)) {
             # values for STO,SAV when price in the interval and SAV[t-1]!=0
             if (SAV[t-1]!=0) { 
                SAV[t]=SAV[t-1]*i 
                STO[t]=0
             }
             # values for STO,SAV when price in the interval and SAV[t-1]==0
             else { 
               STO[t] = STO[t-1]
               SAV[t] = 0 
             }
        }
        # values for STO,SAV when price not in the interval
        else {   
           STO[t] = STO[t-1]
           SAV[t] = 1
        }
}

答案 1 :(得分:0)

我认为你每次迭代都会覆盖向量STO和SAV。很难说,因为价格向量尚未宣布。尝试将STO和SAV初始化为所需长度的向量,而不是0长度向量:

SAV =矩阵(0,1,1000)

STO =矩阵(0,1,1000)

答案 2 :(得分:-1)

我不是一个很好的R,但也许阵列从0开始? (而不是1)

SAV[1] = 0
STO[1] = 100

==&GT;

SAV[0] = 0
STO[0] = 100

我的第二个猜测是关于for循环中的if条件。我会在整个表达式上加上括号,就像这样。

for (t in 2:1000) {
  if ((price[t]>9.9)&(price[t]<10.1)&(SAV[t-1]=0)) {
      STO[t] = STO [t-1]
      SAV[t] = 0
  }
}

我几乎认为它无能为力,但值得一试;)


编辑:

尝试在if条件中使用SAV[t-1]==0代替SAV[t-1]=0 ...


编辑2:

也尝试使用&amp;&amp;操作员而不是&amp;一个......