【问题标题】:How to handle "write.xlsx" error: arguments imply differing number of rows如何处理“write.xlsx”错误:参数暗示不同的行数
【发布时间】:2019-09-24 07:51:16
【问题描述】:

我正在尝试从我创建的数据框列表中写入一个 xlsx 文件,但由于缺少数据而出现错误(我无法下载它)。除了缺少数据之外,我只想编写 xlsx 文件。任何帮助表示赞赏。

对于问题的复制:

library(quantmod)

name_of_symbols <- c("AKER","YECO","SNOA")
research_dates <- c("2018-11-19","2018-11-19","2018-11-14")
my_symbols_df <- lapply(name_of_symbols, function(x) tryCatch(getSymbols(x, auto.assign = FALSE),error = function(e) { }))
my_stocks_OHLCV <- list()
for (i in 1:3) {
    trade_date <- paste(as.Date(research_dates[i]))
    OHLCV_data <- my_symbols_df[[i]][trade_date]
    my_stocks_OHLCV[[i]] <- data.frame(OHLCV_data)
}

您可以在my_stocks_OHLCV[[2]] 和我得到的write.xlsx 错误中看到缺失的数据:

print(my_stocks_OHLCV)
[[1]]
           AKER.Open AKER.High AKER.Low AKER.Close AKER.Volume AKER.Adjusted
2018-11-19      2.67       3.2     1.56       1.75    15385800          1.75

[[2]]
data frame with 0 columns and 0 rows

[[3]]
           SNOA.Open SNOA.High SNOA.Low SNOA.Close SNOA.Volume SNOA.Adjusted
2018-11-14       1.1      1.14     1.01        1.1      107900           1.1
write.xlsx(my_stocks_OHLCV, "C:/Users/MICRO/Downloads/Datasets_stocks/dux_OHLCV.xlsx")

 Error in (function (..., row.names = NULL, check.rows = FALSE,
 check.names = TRUE,:arguments imply differing number of rows: 1, 0

即使我有这些缺失的数据,我该如何运行 write.xlsx?

【问题讨论】:

    标签: r dataframe error-handling r-xlsx


    【解决方案1】:

    您需要问的主要问题是,您想要什么?

    在处理股票数据时,最好的办法是,如果您没有股票数据,则将其删除。这样的东西应该可以工作,

     my_stocks_OHLCV[lapply(my_stocks_OHLCV,nrow)>0]
    

    如果您想要一排充满NA0 然后使用lapply 函数,对于长度为 0 的列表中的每个元素,替换为 NA's、0 的向量 (c(0,0,0,0,0,0)) 等...

    类似的,

    condition <- !lapply(my_stocks_OHLCV,nrow)>0
    my_stocks_OHLCV[condition] <- data.frame(rep(NA,6))
    

    这里我们定义条件变量,作为列表中没有任何数据的元素。然后我们可以用NA 替换它们或将NA 替换为0。但是,我想不出这样做的理由。

    您的问题的一个变体,您可以在 for 循环中处理的一个变体是检查您是否有数据,如果没有,将那里的值替换为 NAs,您可以给出它正确的标题,因为您知道它与哪个股票相关。

    希望这会有所帮助。

    【讨论】:

    • 好答案!但我该怎么做呢? “你想要一个空行吗?然后使用 lapply 函数,对于长度为 0 的列表中的每个元素,替换为 NA、0 的向量 (c(0,0,0,0,0,0)) 等...”
    • 谢谢 GooJ!非常感谢您花时间回答
    猜你喜欢
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多