功能未更改数据框

时间:2018-12-12 14:27:46

标签: r function loops for-loop environment

我最近做了一个简单的for循环,输出过去5个价格的最大值和最小值,并且效果很好,创建了两个新列,分别显示了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循环放入函数中,以便可以像这样调整我想要的最大和最小价格(打印行是作为健全性检查添加的):

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 :(得分:0)

您需要从函数中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)