в R аргументы "для цикла" - PullRequest
       15

в R аргументы "для цикла"

1 голос
/ 18 апреля 2010

Может ли кто-нибудь сказать мне, что не так с кодом 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 ]

3 голосов
/ 18 апреля 2010

Я бы попробовал что-то вроде следующего. Измените его в соответствии с логикой вашей программы

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
        }
}
0 голосов
/ 18 апреля 2010

Я думаю, вы перезаписываете векторы STO и SAV на каждой итерации. Трудно сказать, потому что вектор цен не был объявлен. Попробуйте инициализировать STO и SAV в качестве векторов желаемой длины, а не векторов 0-длины:

SAV = матрица (0,1,1000)

СТО = матрица (0,1,1000)

0 голосов
/ 18 апреля 2010

Я не очень хороший R, но, может быть, массивы начинаются с 0? (вместо 1)

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

==>

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

И мое второе предположение касается условий if в циклах for. Я бы поставил квадратные скобки над всем выражением, примерно так.

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

Не думаю, что это могло бы помочь, но стоит попробовать;)


Edit:

Попробуйте использовать SAV[t-1]==0 вместо SAV[t-1]=0 в вашем условии if ...


Редактировать 2:

Также попробуйте использовать оператор && вместо & one ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...