Используя двойной цикл - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть датафрейм pif , который содержит информацию о некоторых инвестиционных фондах, и список names , который содержит названия указанных фондов (или просто pif 's имена переменных):

names
 [1] mercury_stock  vtb_bric ...

и так далее.

Теперь мне нужно вычислить некоторую важную информацию. Мой желаемый вывод - это кадры с данными о доходах для каждого фонда, которые я затем связываю вместе, используя cbind.

Для этой операции у меня уже есть функция цикла:

i=c(1:1584)
pif<-cbind(i, pif)
for ( i in 2:1584)
{
d_mercury_stock[i] = (pif$mercury_stock[i] - pif$mercury_stock[i-1])/pif$mercury_stock[i-1]
d_vtb_bric[i] = (pif$vtb_bric[i] - pif$vtb_bric[i-1])/pif$vtb_bric[i-1]
...
}

yield<-cbind(d_mercury_stock, d_vtb_bric, ...)

Она работает совершенно нормально , но мне нужно вручную выполнить эту функцию, чтобы получить результаты для каждого фонда - и в кадре данных более 30, то есть я должен скопировать и вставить одну и ту же функцию тридцать раз.

Лучшим решением будет второй цикл, который запускает мою функцию, используя элементы списка names и каким-то образом вставляя туда каждую переменную.

К сожалению, я не могу делайте это, так как я относительно новичок в петлях и повторяющихся функциях. Я подозреваю, что или lapply / sapply или пользовательская функция может быть решением здесь. Что бы вы могли посоветовать?

1 Ответ

0 голосов
/ 08 апреля 2020

Видимо ответ действительно прост. Публикация здесь на случай, если другие пользователи столкнутся с той же проблемой.

for (j in 1:ncol(pif))
  for ( i in 2:1584)
  {
   yield[i,j] = (pif[i,j] - pif[i-1,j])/pif[i-1,j]
  }

Выходные данные - это уже скомпилированная матрица, в которой отсутствуют только правильные имена переменных.

...