Как обработать ошибку «write.xlsx»: аргументы подразумевают различное количество строк - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь записать файл 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, даже если у меня есть эти пропущенные данные?

1 Ответ

1 голос
/ 07 мая 2019

Главный вопрос, который вам нужно задать, это то, что вы хотите вместо этого?

Поскольку вы работаете с данными об акциях, лучшая идея заключается в том, что если у вас нет данных об акциях, удалите их. Нечто подобное должно работать,

 my_stocks_OHLCV[lapply(my_stocks_OHLCV,nrow)>0]

Если вы хотите строку, полную NA или 0 Затем используйте функцию lapply и для каждого элемента списка длиной 0 замените либо NA, вектором 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, - проверить, есть ли у вас данные, а если нет, замените значения там на NA s, и вы могли бы их задать правильные заголовки, как вы знаете, к какому запасу он относится.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...