큰 문제가 있습니다.매우 큰 벡터와 함께 pointDistance를 사용하는 방법
큰 래스터 (행 = 180, 열 수 = 480, 셀 수 = 86400) 처음에는 이진화하여 (1과 0이되도록) 클러스터를 분류했습니다. 1이고 서로 연결된 셀은 같은 라벨을 가지고 있습니다.) 이제는 셀 사이의 모든 거리를 0으로 계산해야합니다. 많은 것이 조용하고 내 큰 문제입니다. I (0하지 않은 세포의 위치 (즉, 세포 수를) 얻을,) 내가 관심이있는 셀의 좌표를 얻기 위해 이런 짓을 :
V=getValues(label)
Vu=c(1:max(V))
pos=which(V %in% Vu)
XY=xyFromCell(label,pos)
이 아주 잘 작동합니다. 따라서 XY는 모든 좌표 (0이 아닌 셀)를 포함하는 행렬입니다. 하지만 지금은 고군분투하고 있습니다. 이 모든 좌표 사이의 거리를 계산해야합니다. 그 다음 나는 그들 중 한 명을 거리 43 개 중 하나에 넣어야한다. 그것은 종류의이 (그냥 예) 같은있다 :
pD=pointDistance(XY,lonlat=FALSE)
R이이 크기의 벡터를 할당 할 수 없습니다 말한다 :
0<x<0.2 bin 1
0.2<x<0.4 bin2
내가 이것을 사용하는 경우. 너무 커지고 있습니다. 내가 예를 들어, 이것을하려고 할 때
for (i in 1:nrow(XY))
{pD=PointDistance(XY,XY[i,],lonlat=FALSE)
pDbin=as.matrix(table(cut(pD,breaks=seq(0,8.6,by=0.2),Labels=1:43)))
df=cbind(df,pDbin)
df=apply(df,1,FUN=function(x) sum(x))}
그것은이 작동 : 그때 내가이 (같은 빈 데이터 프레임 DF 또는 무언가를 만들고 함수 pointDistance는 XY의 모든 단일 값을 통해 실행할 수 있도록) 할 수 있다고 생각 XY의 처음 50 개 값. 하지만 전체 XY 매트릭스에 사용하면 너무 많은 시간이 걸립니다. (때로는이 XY 매트릭스에 10000 xy 좌표가 포함되어 있습니다.) 누구나 빨리 할 수있는 방법이 있습니까?
R이 매번 복사본을 만들어야하므로 한 번에 하나의 열을 추가하여 데이터 프레임을 늘리는 것이 느립니다. 필요한 공간을 미리 할당하십시오. 하지만 어쩌면 더 많은 메모리가 필요하거나 문제를 간단하게 만들 수 있습니다. –
마지막 줄은'df = rowSums (df)'로 바꿀 수있는 것처럼 보입니다. 그게 조금 도움이 될거야. – rosscova