2016-06-27 3 views
0

PostgreSQL 연결에서 래스터 파일을 루프로 가져 오는 중입니다. substring(crop, 12)루프의 부분 문자열에 이름을 지정하여 래스터 파일 가져 오기

crop <- "efsa_capri_barley" 
ras <- readGDAL(sprintf("PG:dbname='' host='' port='' user='' schema='' table='%s' mode=2", crop)) 
paste0(substring(crop, 12)) <- raster(ras, 1) 
나는 R은 문자열의 결과를 인식 사용해야합니까 어떤 기능

() 문자로 : 나는 그 이름과 같이 입력 변수에서 파생 변수에 자동으로 내 새로 얻은 래스터를 할당 할 문자열이 아니라 함수 자체로? paste()에 대해 생각하고 있었지만 작동하지 않습니다. 아마도이 질문에 이미 질문을 받았지만 적절한 답변을 찾을 수 없었습니다.

+0

[R : 문자열을 변수 이름으로 변환하는 방법?] (http://stackoverflow.com/questions/6034655/r-how-to-convert-string-to-variable-name). Google에서 "loop r에 변수 이름 지정"을 검색하여 찾았습니다. – Tchotchke

+0

네, 맞습니다. 나는 내 질문을 연장했다. – andrasz

+1

일반적으로 한 번에 두 가지 이상의 질문을하지 않습니다. 두 번째 질문이 첫 번째 질문과 완전히 관련이 없다는 것을 감안할 때, 나는 그것을 삭제하고 새로운 질문으로 만들 것입니다. 그리고 당신이 @ joran이 당신의 첫 번째 질문에 대답했다고 생각한다면, 나는 앞으로 나아가 올바른 것으로 받아 들일 것입니다. – Tchotchke

답변

5

설명에 따르면 assign이며 기술적으로는입니다.하지만 조언하는 것은 좋지 않습니다.

루프에서 여러 개의 래스터를 가져 오는 경우 R의 가장 좋은 방법은 모두 개의 래스터를 보유하고 그에 따라 각 목록 요소의 이름을 지정하는 목록을 초기화하는 것입니다. 한 번에이 일을 수행 할 수 있습니다

# n is number of rasters 
raster_list <- vector("list",n) 

for (i in seq_len(n)){ 
    ... 
    #crop[i] is the ith crop name 
    raster_list[[substring(crop[i],12)]] <- raster(...) 
} 

또한 한 번에 setNames를 통해 목록의 각 요소의 이름을 설정할 수 있습니다. 그러나 당신은 거의 모든 비용으로 assign을 사용하는 것을 피하려고 노력해야합니다.

+0

당신의 도움이되는 설명을위한 감사 드리며 당신의 힌트없이 나는 즉시 '배당'을했을 것입니다. – andrasz

+0

아마도 새로운 질문을 올리거나 광산을 넓힐 가치가있을 것입니다. 각 래스터 (EU (여전히 영국을 포함하여 ^^) 와이드 데이터)는 대략적으로 약을 가지고 있습니다. 200MB이고 독일의 면적 만 필요합니다. 가져 오기/읽기를 할 때 내 범위까지 래스터를 잘라낼 수 있는지 궁금합니다. sb가 하나를 생각할 수 있습니까? – andrasz

+0

대신 n = 0을 사용하는 래스터의 수입니다. 코드가 목록에 채워지지 않으므로 래스터를 목록에 추가합니다. – andrasz

0

질문을 올바르게 이해하면 assign과 같은 것을 찾고 있습니다. 예를 들어, 당신은 이것을 시도 할 수 있습니다 :

assign(substring(crop, 12), raster(ras, 1)) 

방법 assign 작품을 이해하려면이 코드를 확인할 수 있습니다

x <- 2 
# x is now 2 

var_to_assign <- "x" 
assign(var_to_assign, 3) 
# x is now set to 3 
x 
# 3 

합니까 당신이 원하는 걸 줄?