有人可以告诉我下面的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的载体。
答案 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;一个......