代码之家  ›  专栏  ›  技术社区  ›  Kevin Chen

函数不更改数据帧

  •  -1
  • Kevin Chen  · 技术社区  · 6 年前

    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列上。

    提前谢谢!

    1 回复  |  直到 6 年前
        1
  •  0
  •   mickey    6 年前

    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)