R 函数不更改数据帧

R 函数不更改数据帧,r,function,loops,for-loop,environment,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循环放入一个函数中,这样我就可以调整我希望Max和M

我最近制作了一个简单的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循环放入一个函数中,这样我就可以调整我希望Max和Min以这样的方式为基础的价格(打印行被添加为健全检查):

但是,例如:

FindMaxMin(x = 10)
控制台将输出所有预期结果,但与for循环本身不同,我的数据帧不会自动添加到MaxH和MinL列上

我尝试过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)

工作得很好。非常感谢。
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)