현재 프로젝트에서는 벡터 A의 한 요소에서 실행되는 계산 함수를 사용하여 목록 B에 삽입하는 목록 요소를 반환합니다. 반환 요소에는 첫 번째 목록과 관련된 여러 개의 임의 크기의 큰 행렬이 포함되어 있습니다.결과를 메모리 효율적인 방식으로 목록에 저장할 수 있습니까?
예를 들어 원래 번호 n을 사용하고 n x n의 임의의 행렬을 생성하는 함수를 예로 들어 보겠습니다.
vector.A <- sample(1:2000, 15000, replace = TRUE)
list.B <- as.list(rep(NA, length(vector.A)))
arbitraryMatrix <- function(n) {
matrix(rnorm(n*n), ncol = n, nrow = n)
}
for (i in which(is.na(list.B))) {
print(i)
list.B[[i]] <- arbitraryMatrix(vector.A[i])
}
이 함수는 더 큰 list.B가 느려지 게 만듭니다. 실제로 루프가 끝나기 전에 R이 충돌 할 것이라고 확신합니다. list.B의 어떤 요소도 생성 된 후에는 다시 액세스 할 수 없으므로 계산 속도를 늦추는 방식으로 메모리를 사용하지 않고 디스크에 기록 할 수있었습니다.
청크를 .rda 파일에 저장하여이 작업을 수행 할 수있는 스크립트를 작성할 수는 있지만 좀 더 세련된 솔루션이 필요했습니다.
FF 패키지는이 재미있는 가능성이 보였습니다. http://cran.r-project.org/web/packages/ff/ff.pdf 그러나 목록 개체를 지원하지 않는다고 말할 수 있습니다.
주의 사항 : I 불필요 처음 6999 반복을 다시 실행하지 않고도 7천번째 반복에 발생하는 버그를 복구 할 수 있기를 좋아하기 때문에 내가 루프를 사용하고
- .
- 컴퓨터에 따라 코드가 실행될 때까지 매개 변수를 편집하지만
컴퓨터에서만 천천히 조정하십시오. - 실제의 문제는 목록을 입력으로 사용하므로 arbitraryMatrix 함수를 벡터화하는 데 관심이 없습니다.
- 함수는 많은 메모리를 사용하기 때문에 실제 문제는 메모리 문제가됩니다 (데이터 프레임의 서브 세트가 포함됨).
편집 : r 개체를 임시 파일에 매핑하는 mmap 패키지를 고려하고 있지만이 문제를 해결하는 방법을 알아 내려하고 있습니다.
완전히 _redundant_ 일 때 제목에 태그를 넣지 마십시오. –
목록의 요소를 다시 액세스 할 수 없으면 목록에 요소를 추가 할 필요가 있습니까? – James
나중에 다른 R 프로그램에서 액세스 할 수 있지만 프로세스의이 단계에서는 계산하고 저장해야합니다. –