2012-08-06 2 views
10

세션간에 특정 패키지와 관련된 옵션 또는 정보를 저장할 수있는 확실한 방법이 있습니까?세션간에 패키지 설정 저장

예를 들어 누군가 게임을하고 R 패키지로 출시했다고 가정 해 보겠습니다. 그들이 높은 점수를 저장하고 R이 새로운 세션을 시작할 때마다 재설정하지 않기를 원한다면 어떤 일을하는 것이 가장 좋은 방법일까요? 현재 나는 사용자 홈 디렉토리에 파일을 저장하는 것으로 생각할 수 있지만 그 방법이 마음에 들지는 모르겠습니다.

+0

가 아닌 경우 R 패키지 자체에 대한,하지만이 종류를 저장할 수있는 괜찬아에 세계에서 매우 일반적입니다 숨겨진 파일이나 사용자 홈 디렉토리의 숨겨진 디렉토리에있는 파일 Windows에서는 applicate 데이터 디렉토리 또는 레지스트리를 사용할 수 있습니다. – frankc

+0

나도 같은 질문을 했어, 난 그가 열쇠가 여기에있을 수 있습니다 생각합니다 : http://stackoverflow.com/questions/8661526/permanently-replacing-a-function –

+0

"누군가가 게임을 만들어 그것을 풀어 R 패키지로 "<- Errror, 구문 분석하지 않음 –

답변

4

이것은 접근 방법 일 수 있습니다.

scores <- NA 

그럼 I의 점수 패키지를 생성 : I는 더미 함수 (I는 더미 함수로 바인딩 생성하는 함수) 및 다음 I는 I 세트 scores라는 데이터 세트 더미 패키지를 만들어 데이터 세트.

그럼 내가 라이브러리를 언로드 할 때

loc <- paste0(find.package("new"), "/Data") 
unlink(paste0(loc, "/scores.rda"), recursive = TRUE, force = FALSE) 
scores <- 10 

save(scores, file=paste0(loc, "/scores.rda")) 

그런 다음 R. 내에서 데이터 세트를 변경하려면 다음을 사용하고 현재 데이터 세트는 말한다 agin로드 재 :

> scores 
[1] 10 

수이 당신이 원하는 것을하기 위해 수정 될 수 있습니까? 당신은 어떻게 든간에 저장하지 않으면 안되지만 .Last 기능으로 어지럽히 지 않고이 작업을 수행하는 방법을 잘 모릅니다.

편집 :

그것은 당신이 패키지로 컴파일하고 같이 데이터 세트를 저장 게으른 부하를 사용할 때이 옵션이 있다는 점에서 실용적되지 않습니다 나타납니다

RData.rbd, RData.rbx, .rda 파일이 아닙니다. 즉, 내가 위에서 사용하는 접근 방식은 자동으로 인식되기를 바라는 점에서 다소 쓸모가 없다는 것을 의미합니다.

EDIT2 이 접근법이 작동하고 나는 그것을 만든 패키지에서 시도했다. 당신은 데이터의 게으른로드를 할 수없고, 당신은 명시 적으로 data(scores)을 사용하거나 호출하고있는 함수 안에 data(scores)을 사용해야합니다. 나는 또한 그가 처음 만들어 졌을 때 을 .scores int로 global.env로 지정하고 함수 내에 exists이 있는지 확인했다. `.scores. 나는 함수 내에 점수를 부여했다. 일단 라이브러리를 언로드하고 다시 laod하면 다시는 걱정할 필요가 없습니다.

아마 대안은 여기 조쉬의 충고를 사용하여 어떻게 든 그 변경 될 수있는 기능으로 이것을 저장하는 것입니다 : Permanently replacing a function

+0

'.onUnload'에 대해 어떻게 생각하십니까? 나는 그것을 시도하지는 않았지만 R이 닫힐 때 모든 패키지에 대해 실행되어야한다. 맞습니까? – Backlin

+3

수정 된 점수는 언제든지 다시 저장할 수 있습니다 (자주 사용하지 않는다고 가정). 그렇다면 "마지막에"절약하는 것에 대해 걱정할 필요가 없습니다. –

+0

나는 그걸 가지고 놀아야 할 것입니다. 그러나 이것은 내가 원하는 것을 할 것처럼 보입니다. – Dason

1

나는 디스크 나 데이터베이스에 저장하지 않고 설정을 저장할 방법이 없다고 생각합니다. 조용히 할 수 있습니다 아래 코드를 넣으십시오 ~/.Rprofile. 그러나 options을 사용하는 것보다 다른 방법으로 설정을 저장하는 패키지가있는 경우 수동으로 패키지를 추가해야합니다.

저는 이것이 당신이 원하지 않았다고 말한 것과 정확히 같습니다.하지만 적어도 논쟁의 여지는 있습니다. 내 깜짝 try(..., silent=TRUE)으로

.Last <- function(){ 
    my.options <- options() 
    save(my.options, file="~/.Roptions.Rdata") 
} 

.First <- function(){ 
    tryCatch({ 
     load("~/.Roptions.Rdata") 
     do.call(options, my.options) 
     rm(my.options) 
    }, error=function(...){}) 
} 

~/.Roptions.Rdata 내가 대신 tryCatch을 사용하는 이유입니다, 존재하지 않는 경우 시작시 경고를 제공합니다.

+0

사용자가 .Rprofile을 수정하지 않아도이를 수행하는 방법에 대한 아이디어가 있습니까? – Dason

+1

위의 코드를'zzz.R'의'.onLoad()'와'.onUnload()'에 넣을 수 있습니다.하지만 R을 시작할 때마다 그 패키지를로드해야합니다. – Backlin