나는 한 달 전에 비슷한 질문을했다. 참조하십시오. Count the occurrences of unequal numbers from a data frame바깥 쪽 기능 및 벡터화 기능을 사용자 정의하는 방법은 무엇입니까?
outer
및 Vectorize
함수를 사용하여이 문제를 해결했습니다. 이것은 완벽하게 작동하지만 지금은 내 메모리 크기를 초과하는 거대한 행렬이
dist_mat<- outer(1:nrow(df),1:nrow(df),
FUN = Vectorize(function(i,j) sum(df[i,]!=df[j,])))
다음과 같이 내 솔루션입니다.
dist_mat
을 얻은 후에는 각 행에 대해 2보다 작거나 같은 열 수를 계산합니다. 이제는 할 수 없습니다. 그래서, 메모리 문제를 피하기 위해 외부 함수에서 카운트 연산을 결합 할 수 있는지 궁금합니다. 내 결과는 벡터 일뿐입니다.
미리 감사드립니다. (가) 이동 얻을에서
tot.rows <- nrow(df)
res <- numeric(tot.rows)
for(i in 1:tot.rows)
for(j in 1:tot.rows)
res[[i]] <- res[[i]] + (sum(df[i,] != df[j,]) <= 2)
outer
당신이 갈거야, 그래서 i * j
매트릭스를 사전 할당합니다 :이 엄격하게 귀하의 질문에 대답하지 않지만
다른 질문에서 Roland의 대답에도 메모리 문제가 있습니까? [더 이상의 생각에 대해 내 의견을 편집하십시오 : 아마도 절반 이하로 작게 줄지 만 두 열을 더 추가하기 때문에 가능할 것입니다.] 이것은 메모리 문제를 해결하는 한 가지 방법 일 것입니다. 그렇다면 벡터화 된 연산을 사용하여 원하는 수를 얻을 수 있습니다. – Aaron