Функция не меняет фрейм данных - PullRequest
0 голосов
/ 12 декабря 2018

Я недавно сделал простой цикл for, который выводит максимальные и минимальные значения из последних 5 цен, и он отлично работает, создавая 2 новых столбца, показывающих MaxH и MinL:

for(i in 5:nrow(XBTUSD_df_s)){
XBTUSD_df_s$MaxH[i] = max(XBTUSD_df_s$Price[(i-(5-1)):i])
XBTUSD_df_s$MinL[i] = min(XBTUSD_df_s$Price[(i-(5-1)):i])
}

Затем я помещаю этоцикл for в функцию, так что я могу настроить количество цен, которые я хочу, чтобы Max и Min были основаны, например, так (строки печати были добавлены как проверка работоспособности):

FindMaxMin = function(x){
  for(i in x:nrow(XBTUSD_df_s)){
    XBTUSD_df_s$MaxH[i] = max(XBTUSD_df_s$Price[(i-(x-1)):i])
    XBTUSD_df_s$MinL[i] = min(XBTUSD_df_s$Price[(i-(x-1)):i])
    print(XBTUSD_df_s$MaxH[i])
    print(XBTUSD_df_s$MinL[i])
  }
}

Но после, например,:

FindMaxMin(x = 10)

Консоль выдаст все ожидаемые результаты, но, в отличие от самого цикла for, мой информационный фрейм не будет автоматически добавляться в столбцы MaxH и MinL.

Я пробовалreturn (), и я думаю, что, скорее всего, это проблема глобальной среды, но, похоже, я не могу обойти ее.

Заранее спасибо!

1 Ответ

0 голосов
/ 12 декабря 2018

Вам необходимо return объект из функции, а затем назначить его позже:

FindMaxMin = function(x, XBTUSD_df_s){
  for(i in x:nrow(XBTUSD_df_s)){
    XBTUSD_df_s$MaxH[i] = max(XBTUSD_df_s$Price[(i-(x-1)):i])
    XBTUSD_df_s$MinL[i] = min(XBTUSD_df_s$Price[(i-(x-1)):i])
    print(XBTUSD_df_s$MaxH[i])
    print(XBTUSD_df_s$MinL[i])
  }
  return (XBTUSD_df_s)
}

new = FindMaxMin(10, XBTUSD_df_s)
...