You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

问题根因

  1. getSymbols默认会将下载的数据以xts时间序列对象的形式存入全局环境,变量名为传入的股票代码TATACONSUM.NS,而非字符串。
  2. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:35:21