R语言for循环内如何使用循环索引配合$符号完成取值操作
R语言for循环动态索引取值解决方案
问题原因
你代码中i$i.Adjusted的写法无法正常取值,核心原因有两点:
- 循环变量
i存储的是股票代码的字符串值,并非getSymbols自动赋值到环境中的数据集对象,需要先读取对应变量才能操作 - R的
$运算符后接的标识符会被当做固定字符串处理,不会动态替换为i的实际值,不支持动态列名取值
正确实现方式
方法1:结合quantmod内置Ad()函数(推荐,适配量化场景)
quantmod包提供了专门提取调整后价格的Ad()函数,无需手动拼接列名,写法更简洁:
for (i in tickers){ getSymbols(i, from = '2021-01-6', to = "2021-10-21",warnings = FALSE, auto.assign = TRUE) # 读取对应股票代码的数据集 stock_df <- get(i) # 提取调整后价格计算9期尾部均值 MA9 = mean(tail(Ad(stock_df), n=9)) print(MA9) }
方法2:动态拼接列名+[[运算符(通用场景)
如果需要自定义动态列名,用[[运算符替代$即可支持传入字符串变量作为列名:
for (i in tickers){ getSymbols(i, from = '2021-01-6', to = "2021-10-21",warnings = FALSE, auto.assign = TRUE) stock_df <- get(i) # 动态拼接调整后价格的列名 adj_col_name <- paste0(i, ".Adjusted") MA9 = mean(tail(stock_df[[adj_col_name]], n=9)) print(MA9) }
内容的提问来源于stack exchange,提问作者Te_Ke
相关产品推荐
相关产品推荐

