Ниже я запускаю эту функцию, чтобы объединить тонны файлов в один большой файл, все время создавая отчет об успешных запусках. Вот функция (обратите внимание, что различные ошибки присваивания определены выше):
mergeFiles <- function(pathRoot, pathToSaveMergedFile, finalFileName){
folders <- list.dirs(path=pathRoot, recursive=F)
mergedFiles <- data.frame()
initialMsg()
report <- data.frame()
for (folder in folders){
## folder=folders[1]
files <- list.files(path=folder, pattern='xls.$')
for (file in files){
msgFileBeingMerged(file.path(folder,file))
tmp <- tryCatch(read_excel(path=file.path(folder,file)),
error=function(e) {msgError(file.path(folder,file));stop()},
warning=function(w) msgWarning(file.path(folder,file)) )
## tmp <- tryCatch(read.xlsx(file=file.path(folder,file), sheetIndex=1),
## error=function(e) {msgError(file.path(folder,file));stop()},
## warning=function(w) msgWarning(file.path(folder,file)) )
## controling for variable type
idx=!is.na(tmp$rg)
tmp=tmp[idx,]
tmp<-formatVarTypes(tmp)
tmp.report <- data.frame(file=file.path(folder,file), Rows=nrow(tmp))
report <- rbind(report, tmp.report)
mergedFiles <- tryCatch(rbind(mergedFiles, tmp),
error=function(e) {msgErrorMergingData(file.path(folder,file));stop()},
warning=function(w) msgWarning(file.path(folder,file)) )
msgFileMerged(file.path(folder,file))
}
}
## tryCatch(WriteXLS(mergedFiles, ExcelFileName=file.path(path.expand(pathToSaveMergedFile),finalFileName), row.names=F),
## error=function(e) {msgErrorWhenSaving();stop()},
## warning=function(w) "Warning" )
finalFileName <- file.path(path.expand(pathToSaveMergedFile),finalFileName)
#finalFileNameCSV = gsub(x=finalFileName, pattern='.xlsx$', replacement='.csv')
#write.csv(mergedFiles, file=finalFileNameCSV, row.names=F)
#print(dim(mergedFiles))
write.xlsx(mergedFiles, file=finalFileName)
#tryCatch(write.xlsx(mergedFiles, file=finalFileName),
# error=function(e) {msgErrorWhenSaving();stop()},
# warning=function(w) "Warning" )
reportFileName <- 'report.xlsx'
write.xlsx(x=report, file=file.path(path.expand(pathToSaveMergedFile), reportFileName))
## WriteXLS(x=report, ExcelFileName=file.path(path.expand(pathToSaveMergedFile), reportFileName))
reportMsg(mergedFiles, report, pathToSaveMergedFile, reportFileName)
finalMsg()
}
Я продолжаю получать следующую ошибку / трассировку:
Error: Must subset rows with a valid subscript vector.
i Logical subscripts must match the size of the indexed input.
x Input has size 42 but subscript `c(idx)` has size 0.
Error: Must subset rows with a valid subscript vector.
i Logical subscripts must match the size of the indexed input.
x Input has size 42 but subscript `c(idx)` has size 0.
Run `rlang::last_error()` to see where the error occurred.
17.
stop(fallback)
16.
rlang:::signal_abort(x)
15.
cnd_signal(cnd)
14.
(function (cnd)
{
cnd$subscript_arg <- i_arg
cnd$subscript_elt <- "row" ...
13.
signalCondition(cnd)
12.
signal_abort(cnd)
11.
cnd_signal(new_error_subscript_size(i, n = n, ..., body = cnd_body_vctrs_error_indicator_size))
10.
stop_indicator_size(i = i, n = n, subscript_action = subscript_action,
subscript_arg = subscript_arg)
9.
vec_as_location(i, n)
8.
withCallingHandlers(expr, vctrs_error_subscript = function(cnd) {
cnd$subscript_arg <- i_arg
cnd$subscript_elt <- "row"
if (isTRUE(assign) && !isTRUE(cnd$subscript_action %in% c("negate"))) { ...
7.
subclass_row_index_errors(vec_as_location(i, n), i_arg = i_arg,
assign = assign)
6.
vectbl_as_row_location(i, nr, i_arg, assign)
5.
vectbl_as_row_index(i, x, i_arg)
4.
tbl_subset_row(xo, i = i, i_arg)
3.
`[.tbl_df`(tmp, c(idx), ) at CLEA-merging-source.R#84
2.
tmp[c(idx), ] at CLEA-merging-source.R#84
1.
mergeFiles(pathRoot, pathToSaveMergedFile, finalFileName)
Я пытался изменить мой tmp[c(idx), ]
на tmp[idx, ]
и (безуспешно) попытался изменить его на data.frame
в случае, если это проблема tbl
(согласно аналогичным сообщениям Stack Overflow. Любое понимание того, почему я вижу эту ошибку? Или для ответа на вопрос требуется дополнительная информация? Цените любую информацию.
Изменить: контекст трассировки, если полезно
1. +-global::mergeFiles(pathRoot, pathToSaveMergedFile, finalFileName)
2. | +-tmp[idx, ] clea/ReleaseScript/CLEA-merging//CLEA-merging-source.R:85:12
3. | \-tibble:::`[.tbl_df`(tmp, idx, ) clea/ReleaseScript/CLEA-merging//CLEA-merging-source.R:85:12
4. | \-tibble:::tbl_subset_row(xo, i = i, i_arg)
5. | \-tibble:::vectbl_as_row_index(i, x, i_arg)
6. | \-tibble:::vectbl_as_row_location(i, nr, i_arg, assign)
7. | +-tibble:::subclass_row_index_errors(...)
8. | | \-base::withCallingHandlers(...)
9. | \-vctrs::vec_as_location(i, n)
10. \-vctrs:::stop_indicator_size(...)