【问题标题】:in R, the arguments of "for loop"在 R 中,“for 循环”的参数
【发布时间】:2010-04-18 13:25:01
【问题描述】:

谁能告诉我下面的 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 找到向量。

【问题讨论】:

  • if 块周围缺少花括号。

标签: r


【解决方案1】:

我会尝试以下方法。修改它以与你的程序逻辑一致

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
        }
}

【讨论】:

  • 谢谢你的帮助,我认为主要的问题是我不应该把它们分成两个循环......非常感谢你
【解决方案2】:

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

SAV = 矩阵(0,1,1000)

STO = 矩阵(0,1,1000)

【讨论】:

  • 其实价格是向量,主要问题在下面 for (t in 2:1000) { if ((price[t]>9.9)&(price[t]
【解决方案3】:

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

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

==>

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:

也尝试使用 && 运算符而不是 & one ...

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    相关资源
    最近更新 更多