r - 函数不改变数据框
问题描述
我最近做了一个简单的 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() ,我认为这很可能是一个全球环境问题,但似乎无法理解它。
提前致谢!
解决方案
您需要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)
推荐阅读
- java - 创建事务喜欢使用 EJB 容器管理
- jira-rest-api - 当查询包含空格时如何通过 REST API 检索 Jira 问题
- api - 如何使用 Square API V2 从 Square 检索订单列表
- email - 基于等于今天日期的单元格值发送电子邮件的脚本
- swift - 获取数字 1-5,无论它是什么数字
- php - 来自 CLI 的 PHP 使用 Curl Multi Exec
- android-studio - 包需要 Flutter SDK 版本 >=0.1.4 <2.0.0
- javascript - 使用 javascript img 将图像转换为 base64 字符串第一次未加载
- bitbucket - Bitbucket 服务器休息集成
- c# - 使用 Alexa.net - 我可以从代码中调用意图吗?