【问题标题】:Function not changing the data frame函数不改变数据框
【发布时间】:2018-12-12 14:27:45
【问题描述】:

我最近做了一个简单的 for 循环,输出过去 5 个价格的 Max 和 Min,它运行良好,创建了 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(),我认为这很可能是一个全球环境问题,但我似乎无法理解它。

提前致谢!

【问题讨论】:

    标签: r function loops for-loop environment


    【解决方案1】:

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

    【讨论】:

    • 完美运行。非常感谢。
    猜你喜欢
    • 2014-03-15
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 2018-03-12
    • 2021-02-03
    相关资源
    最近更新 更多