2012-06-22 3 views
0

나중에 검색하기 위해 디스크에 저장하려는 일년에 몇 가지 변수가 있습니다. 예 :변수를 목록에 넣은 다음 다시 가져 오기

Yr.data <- list() 

#Year 1 
a <- "Year 1" 
b <- 72 
c <- matrix(1, nrow=2, ncol=2) 
Yr.data[[1]] <- list(a=a, b=b, c=c) 

#Year 2 
a <- "Year 2" 
b <- 99 
c <- matrix(3, nrow=2, ncol=2) 
Yr.data[[2]] <- list(a=a, b=b, c=c) 

save (Yr.data, file="Yr_data.Rda") 

rm(a,b,c,Yr.data) 

그럼 나중에 내가 (예에서 두 번째 년) 1 년에 대해, 다시 이러한 변수를 얻으려면 :

load("Yr_data.Rda") 
# Here I want to "unlist" Yr.data[[2]], so I get a, b, c as separate variables 
print(b) 
[1] 99 
c <- Yr.data[[2]]$C# I know this is a way to do it, but I want it automatically 

이 할 수있는 현명한 방법이 있나요? 둘 다 a = a 등을 쓰지 않고 변수를 저장하고 특히 변수를 지정하지 않고 저장하십시오. 1 년에 저장하고자하는 실제 데이터는 훨씬 더 복잡합니다 (공간 객체, 데이터 프레임 등). 나는 해결책이 간단하다고 생각하지만, 어쨌든 나는 그것을 발견하는데 집착했다 ...

고마워.

/크리스

업데이트 : 감사합니다 도움이 노력을 위해, 내가 정말 감사드립니다. 문제 설명이 충분히 명확하지 않다는 것을 알고 있습니다. 각 연도 (및 측정 포인트)에 대해 예를 들어 변수 b 및 c가 있습니다 (그러나 연간 및 측정 포인트마다 다른 값이 있음). 나중의 처리를 위해 디스크에 저장해야하는이 값들. b는 예를 들어 list() 또는 SpatialPolygonsDataFrame [] (데이터베이스에 저장하는 방법을 모르는 경우) 일 수 있습니다. 변수 b와 c를 처리 할 다른 R- 스크립트가 있습니다. 복잡성은 "b"를 같은 파일에 여러 번 저장하려고합니다. 그래서 나는이 목록에 넣어 스마트이라고 생각 :이 코드를 않습니다,하지만 난 나중에 예를 들어 D <에 대한 (이상의 변수를 추가 할 경우에 그것을 할 수있는보다 강력한 방법을 배울 기대했다

Yr.data <- list() 
b <- 17 
Yr.data[[1]] <- list(b=b) 
b <- 42 
Yr.data[[2]] <- list(b=b) 

b <- Yr.data[[1]]$b # b becomes 17 
# Or this, in case I need to analyze the second year 
b <- Yr.data[[2]]$b # b becomes 42 

- 34 첫 해 및 d < - 43 두 번째 해).

업데이트 2 : 명확하게 설명하지 못해 죄송합니다. 나는 너의 시간을 낭비하고 싶지 않아. 마지막으로 한 번 해보도록하겠습니다.

입력 변수 a, b, c를 처리하는 R 스크립트가 있습니다. 필자의 예제에서 이러한 변수는 간단하지만 실제로는 sp :: SpatialPolygonsDataFrame과 같은 더 복잡한 객체이므로 데이터 프레임에 넣을 수 없습니다. 때로는 한 세트의 변수를 처리해야하는 경우가 있습니다. 나는 그것이 좋은 목록에 목록과 같은 서로 다른 세트를 저장하는 생각, 그래서 내가 먼저 세트를 실행하려는 경우, 나는리스트의 목록의 첫 번째 목록을 선택

Year.I.need.to.analyze <- 1 
getAllVariablesInList(Yr.data[[Year.I.need.to.analyze ]]) # creates a, b, c 
result.I.want <- b * c 

을 그리고 난을 분석해야 할 때 두 번째 해에는 "Year.I.need.to.analyze"를 2로 변경하고 스크립트를 다시 실행해야합니다. 파일 이름과 디렉토리에 "greping"과 "paste() : ing"을 피하기 위해 별도의 .Rda 파일에 각 세트를 저장하지 말고 어느 파일이 필요한지 계속 추적하는 것을 피하는 것이 좋습니다.

나는 예제가 간단하다는 것을 알고 있지만, 실제 스크립트는 몇 년 사이에 건너 뛰고 그 사이에 플롯을 만들고 내 보내야합니다. 나는 모든 것을 강력한 방식으로 자동화하기를 바랬다. 혼란에 다시 한 번 죄송합니다. 이 문제를 해결하기 위해 노력한 후, 나는 너무 피곤해서 문제를 최선의 방법으로 설명 할 수 없음을 깨달았다.

+0

'저장 (A, B, C, 파일 = "Yr1_data.Rda") ', 등? 나는 네가 뭘하고 있는지 말할 수 없다. – joran

+0

죄송합니다. 나는 1 년 동안 모든 파일을 하나의 파일로 만들고자하는 강력한 코드 때문에 언급해야합니다. 나는 오랜 세월 동안 데이터를 저장해야합니다. – Chris

+0

아마도 목록 대신 환경을 사용 하겠지만 별 다를 것이 없습니다. 예 : 'e <- as.environment (Yr.data, recursive = FALSE); ls (e); e $ c; with (e, b); get ("c", pos = e)' – GSee

답변

0

나는 마침내 그것을 처리했습니다. 어쩌면 적용 기능을 사용하면 더 나을 것입니다. 모든 지원에 다시 한 번 감사드립니다.

Yr.data.x <- Yr.data[[1]] # Select year to work with 

for (i in 1:length(Yr.data.x)) { 
    name.i <- names(Yr.data.x)[i] 
    value.i <- Yr.data.x[[i]] 
    assign(name.i, value.i) 
} 
rm(i, name.i, value.i, Yr.data.x) 

/크리스

0

어쩌면

L3 <- LETTERS[1:3] 
(d <- data.frame(cbind(x=1, y=1:10), fac=sample(L3, 10, replace=TRUE))) 

## The same with automatic column names: 
y<-data.frame(cbind( 1, 1:10),  sample(L3, 10, replace=TRUE)) 

dput(y,file='test.data') 
rm(y) 
y<-dget(file='test.data') 

같은 뭔가 확실하지 난 당신이 요구하는 것을 얻을.

또는

dump(c("L3","y"),'test.data') 
1

이 작업을 수행하는 방법을 시도 선택할 수 여러 가지가 있습니다 R.에 대한 데이터베이스 인터페이스를 사용하는 것입니다. MySQL과 SQLite는 모두 잘 인터페이스를 테스트 한 :

Recommendations for database with R

RSQLite 그것이 잘 sqldf 패키지에 통합되어 내 마음의 추가 이점을 가지고있다.

관련 문제