2016-12-17 2 views
-1

나는 지리적 영역에 대해 위도와 경도의 정사각형 메쉬를 가지고 있습니다. 그러나 나는이 메쉬의 네 모퉁이의 위도와 경도 값만 알고 있습니다. 이들을 사용하여 모든 십자선에서 lat-long 값을 계산해야합니다. 그래서 위도와 경도에 대해 R에 중첩 루프 프로그램을 따로 따로 만들었습니다.원하는 결과를 내보낼 수 없습니다.

tllong<-67.481961 

    sink("output_long.txt") 
    for (i in c(1:11447)) { 
    for (j in c(1:10335)) { 
     tllong<- 67.481961 + (j-1)*0.0030769 
     print(tllong) 
    } 

    } 
    sink() 

위의 프로그램은 경도를 계산하기위한 프로그램입니다. tllong은 메쉬의 왼쪽 상단 모서리에있는 경도 값입니다. 11447은 위도의 수이고 10335는 경도의 수입니다.

마찬가지로 위도 계산을위한 프로그램을 만들었습니다. tllat

tllat<-36.348639 

    sink("output_lat_again.txt") 
    for (i in c(1:11447)) { 
     for (j in c(1:10335)) { 
     print(tllat) 
     } 
     tllat<- tllat - (i-1)*0.002508 
    } 
    sink() 

는 왼쪽 상단 메쉬 광장의 위도의 값입니다.

루프가 첫 번째 행에 대한 모든 위도와 긴 값을 계산한다는 것을 알 수 있습니다. 그런 다음 두 번째 행으로 이동 한 다음 세 번째로 이동합니다. 그러나 두 프로그램 모두에 대해 내 보낸 텍스트 파일을 가져올 때 모든 값이 포함 된 단일 열이 표시됩니다. 이것은 나에게별로 쓸모가 없다. 나는 xlsx 형식의 싱크 ("output_long.xlsx")을 사용하여 R의 출력 결과를 내보내려고했지만 엑셀 파일 (4-5 시간의 일정한 루프 실행 후)을 열면 열지 못했습니다. . 오류 메시지는 파일이 손상되었거나 파일의 형식이 다르다는 것을 나타냅니다. 나는 3-4 번 시도했지만 헛된.

그래서이 두 프로그램의 결과를 Excel 파일에 내 보내어 하나의 열에 있지만 적절한 행렬 형식으로 모든 값을 가져 오지는 않습니다 (예 : 각 셀의 long, long 값은 메쉬의 해당 십자선에서 long, lat 값까지).

또한 누군가가이 두 프로그램을 함께 실행하여 동일한 파일에서 한 번의 실행으로 위도 - 경도 값을 얻을 수 있다고 말하면 좋을 것입니다.

+1

싱크는 Excel 파일이 아닌 텍스트 파일을 만듭니다. 또한 루프가 필요하지 않습니다. 나는 Roland

답변

1

10335 * 11447 = 118304745 쌍의 위도/경도 값을 만들고 싶습니다. 꽤 큰 숫자입니다. 그 맞습니까? 그러나, 나는 작은 예에 적용된 절차를 보여줄 것이다. 이 시도 :

#setting the values of parameters 
tllong<-67.481961 
tllat<-36.348639 
deltalong<-0.0030769 
deltalat<-0.002508 
#small example: you can set the following to the real values 
nlong<-10 
nlat<-10 
#create vectors of values without loops 
lat<-seq(tllat,by=deltalat,length.out=nlat) 
lon<-seq(tllong,by=deltalong,length.out=nlong) 
#now we build every possible pair of lat/lon values 
latlong<-expand.grid(lon=lon,lat=lat) 
#we export it to a csv file 
write.csv(latlong,"somefile.csv",row.names=FALSE,quote=FALSE) 

을 끝에서, somefile.csv가 생성됩니다. 값을 사용하면 생성 된 파일이 매우 커질 수 있습니다.

+0

감사합니다. 그리고 틀림없이 정확합니다. 난 세포에서 좌표로 lat - long 값이 필요합니다. lat의 두 개의 인접한 열과 해당 long도 작동합니다. 이 프로그램을 실행하려했지만 시스템이 멈추었 고 프로세스를 종료해야했습니다. 나는 이것이 왜 일어나는 지 모른다. 마지막으로 루프 프로그램을 실행했을 때 완전히 실행 되려면 약 4-5 시간이 걸렸지 만 교수형을 당하지는 않았습니다. 이 문제를 해결하기 위해 제가 할 수있는 일이 있습니까? –

+0

어느 시점에서 중단됩니까? 'expand.grid()'또는'write.csv()'호출에서? 1 억 개가 넘을 때 이들은 값 비싼 메모리 풋 프린트가 될 수 있지만 동시에 벡터화됩니다. @nicola는 벡터 사이의 가능한 모든 조합에 대해'sapply()'또는'outer()'를 사용하여 반복적으로 txt로 덤핑하도록 조정할 수 있습니다. 또는 청크로 데이터를 처리합니다. – Parfait

관련 문제