不改变数据框的功能
Function not changing the data frame
我最近制作了一个简单的 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)
我最近制作了一个简单的 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)