파일 foreach
.combine
폴더와 Rds
파일 rbind
을 하나로 읽는 매우 간단한 작업을 시도 하고 있습니다.
all_dfs <- foreach(j = list.files(pattern = ".Rds"),
.errorhandling = "pass",
.combine = rbind,
.multicombine = TRUE) %dopar% {eachRdsFile <- readRDS(j)}
그리고 오류가 발생합니다.
결합 함수 호출 오류 : rbind (deparse.level, ...)의 simpleError : 잘못된 목록 인수 : 모든 변수의 길이가 같아야합니다.
그러나 모든 파일을 반복하고 질문하면 length
모두 동일합니다 (82).
for (j in list.files(pattern = ".Rds")) {
eachRdsFile <- readRDS(j)
print(length(eachRdsFile))}
이 foreach
오류는 파일 153/206에서 발생합니다. 1 : 152에서 작동합니다. 153 파일을 열고 조사했는데 152와 똑같이 괜찮아 보입니다. 재현 가능한 최소한의 예제를 시도했습니다.
library(parallel)
library(doMC)
mycores <- 8
registerDoMC(cores = mycores)
testdfs <- foreach(j = 1:206,.errorhandling = "pass",.combine = rbind,.multicombine = TRUE) %dopar% {
eachdf <- data.frame(A = runif(10), B = runif(10))}
하지만 잘 작동합니다. 나는 foreach
1 : 152를 위해 실행 한 다음 파일 153을로드 rbound
했고 함께 잘 작동합니다. Foreach
파일 153 : 206에서 제대로 작동합니다 (206이 마지막 파일 임). 55 : 206이 제대로 작동합니다 (152 개 파일). 54 : 206 실패 (153 개 파일). 그렇다면 문제가 rbinding
> = 153 개 파일에있을 수 있습니까? 내 reprex 시도는 206 개의 파일로 성공 했으므로 rbinding
모든 개체의> = 153에 문제가 없습니다 .
왜 이런 일이 일어날 지 아무도 생각할 수 없습니까? 아이디어가 부족합니다. 버그처럼 느껴지나요? 미리 감사드립니다.
편집 : 해결에 도움을 주신 Florian Privé에게 다시 한번 감사드립니다. 문제는 내 writeLines
및 사용과 관련이 sink
있습니다 print
( progress bars
아무리 노력해도 병렬로 작업 할 수 없기 때문에 (또는 )).
writeLines(c(""), "log.txt")
all_dfs <- foreach(...){
sink("log.txt", append = TRUE)
목록으로 출력했을 때 싱크 스택 전체 오류가 문제인 것으로 나타났습니다.
dmi3kno의 답변 덕분에 마침내 수정했고 .combine
오류없이 접근 방식 을 사용했습니다 .
를 제거하여 .combine
목록을 가져온 다음 do.call("rbind", your_list)
.
아마도 더 효율적일 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다