RStudio中write_xlsx导出Excel报错:Argument x需为数据框或数据框列表
R代码问题排查:write_xlsx导出股票数据失败
问题场景
用户编写了以下R代码,用于从Yahoo Finance下载TATACONSUM.NS的股票数据并导出至Excel:
# ---- setwd("F:/Business Analytics/Shares Monitor") getSymbols("TATACONSUM.NS", src="yahoo") library("writexl") write_xlsx("TATACONSUM.NS","F:/Business Analytics/Shares Monitor//Stock_TATACONSUM-NS.xlsx") # ----
运行后数据在RStudio中正常显示,但调用write_xlsx时触发错误:
Error in write_xlsx("TATACONSUM.NS", "F:/Business Analytics/Shares Monitor//Stock_TATACONSUM-NS.xlsx") : Argument x must be a data frame or list of data frames
问题根因
getSymbols默认会将下载的数据以xts时间序列对象的形式存入全局环境,变量名为传入的股票代码TATACONSUM.NS,而非字符串。- 调用
write_xlsx时传入的是字符串"TATACONSUM.NS",不是实际的数据集对象;同时xts对象本身也不符合write_xlsx要求的数据框/数据框列表格式,因此触发错误。
修正方案
方案一:直接下载为数据框(推荐)
通过auto.assign = FALSE让getSymbols直接返回数据,赋值给自定义变量,避免自动创建xts对象:
# ---- setwd("F:/Business Analytics/Shares Monitor") # 下载数据并返回为数据框格式 tataconsum_data <- getSymbols("TATACONSUM.NS", src="yahoo", auto.assign = FALSE) library("writexl") # 传入实际的数据框对象导出 write_xlsx(tataconsum_data, "F:/Business Analytics/Shares Monitor/Stock_TATACONSUM-NS.xlsx") # ----
方案二:将现有xts对象转为数据框导出
如果保留默认的xts对象,需先转换为数据框,同时提取日期索引为单独列(避免丢失日期信息):
# ---- setwd("F:/Business Analytics/Shares Monitor") getSymbols("TATACONSUM.NS", src="yahoo") library("writexl") # 将xts对象转为数据框,提取日期索引 tataconsum_df <- as.data.frame(TATACONSUM.NS) tataconsum_df$Date <- rownames(tataconsum_df) rownames(tataconsum_df) <- NULL # 导出数据框 write_xlsx(tataconsum_df, "F:/Business Analytics/Shares Monitor/Stock_TATACONSUM-NS.xlsx") # ----
额外提示
- 路径中的双斜杠
//可简化为单斜杠/,Windows系统下两种写法均支持,单斜杠更简洁。 - 如果需要导出多个股票数据,可将数据框存入列表,再传入
write_xlsx实现多工作表导出。
内容的提问来源于stack exchange,提问作者Shrikant Shirodkar
相关产品推荐
相关产品推荐

