Проблема с заполнением матрицы петлей - PullRequest
0 голосов
/ 09 февраля 2020

Я на своих первых шагах кодирования в R.

Я пытаюсь заполнить матрицу, которая основана на некоторых векторах внутри матрицы. Это моя матрица:

 OPEN  NET_CONTRIBUTION RETURN CONTRIBUTION_RETURN SAVING_RETURN CLOSE
[1,] 0     900              0.019  17.1                0             ?    
[2,] 917.1 900              -0.006 -5.4                0             ?    
[3,] ?     900              0.004  3.6                 0             ?    
[4,] 903.6 900              0.004  3.6                 0             ?    
[5,] 903.6 900              0.002  1.8                 0             ?    
[6,] 901.8 900              0.002  1.8                 0             ?    

NET_CONTRIBUTION - это вектор с постоянным числом. Return - вектор случайных значений.

  • CONTRIBUTION_RETURN является вычислением NET_CONTRIBUTION * (1 + RETURN).
  • SAVING_RETURN должно быть открыто * (1 + ВОЗВРАТ)
  • ЗАКРЫТЬ должно быть ОТКРЫТО + NET_CONTRIBUTION + CONTRIBUTION_RETURN + SAVING RETURN

  • OPEN - значение CLOSE для верхнего ряда.

Итак, я попробовал этот код, и он не работает ,

for (i in 1:444){
  Investment[i,5] <-  Investment[i,1]*(1+Investment[i,3]) #Saving Return
  Investment[i,6] <-  Investment[i,1] + Investment[i,2] + Investment[i,4] Investment[i,5] # CLOSE
  Investment[i+1,1] <-  (Investment[i,6]) # OPEN in the next row
}

Я получаю следующее сообщение:

> > for (i in 1:444){
> +   Investment[i,5] <-  Investment[i,1]*(1+Investment[i,3])
> +   Investment[i,6] <-  Investment[i,1] + Investment[i,2] + Investment[i,4] Investment[i,5] Error: unexpected symbol in: " 
> Investment[i,5] <-  Investment[i,1]*(1+Investment[i,3])  
> Investment[i,6] <-  Investment[i,1] + Investment[i,2] +
> Investment[i,4] Investment"
> >   Investment[i+1,1] <-  (Investment[i,6])

Может быть, я не правильно отношусь к этой идее. Спасибо всем за помощь, Том

Ответы [ 2 ]

1 голос
/ 09 февраля 2020

У вас просто отсутствует пропущенный символ + в вычислении close (Investment[i,6])

У вас должно быть

Investment[i,6] <-  Investment[i,1] + Investment[i,2] + Investment[i,4] + Investment[i,5]

, но вместо вас иметь

Investment[i,6] <-  Investment[i,1] + Investment[i,2] + Investment[i,4] Investment[i,5]

Обратите внимание на отсутствие + между Investment[i,4] и Investment[i,5]

0 голосов
/ 09 февраля 2020

В R у нас есть эта концепция векторизации, которая применяет все, что вы делаете, ко всему вектору (или матрице). Так что вам действительно не нужны петли. Большинство вещей намного проще, чем вы думаете. Например:

NET_CONTRIBUTION = rep(900, 444)
RETURN = runif(444)
CONTRIBUTION_RETURN = NET_CONTRIBUTION * (1+RETURN)

Тогда вы, вероятно, не захотите использовать матрицу для комбинации этих векторов. Data.frame кажется более подходящим. Просто сделайте:

MyDataFrame = data.frame(NET_CONTRIBUTION, RETURN, CONTRIBUTION_RETURN)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...