2012-01-27 2 views
2

I이R은 함수를 실행

> f() 
> 

등, 대화식 세션의 기능을 실행할 때, I는 R 후

f <- function(){ 
    x <- 3 
} 

의 기능을 갖고 있다면 변수 x가 정의되지 않았거나 액세스 가능하지 않음

함수 w의 내용과 같이 f를 실행하는 방법이 있습니까? 대화식 세션에 줄 단위로 입력 되었습니까?

편집 : 다음은이 기능을 사용하려는 이유입니다. 다중 단계 분석 워크 플로우를 반 자동화하는 데 사용하는 스크립트 모음이 있습니다. 그것들을 사용하기 위해서, 나는 보통 스크립트를 소스 화하고 사전 처리 된 데이터로 세션을 초기화합니다. 그런 다음 대화식으로 분석을 계속할 수 있습니다.

메타 데이터를 스크립트에 첨부하기 위해 분석 스크립트를 기본 클래스를 구현하는 S4 개체로 래핑했습니다. 현재 각 스크립트의 내용은 실행될 수있는 run()이라는 멤버 함수에 있습니다. 문제는 run() 함수를 실행하여 초기 분석 계산을 수행 할 수는 있지만 사전 처리 된 데이터로 환경을 설정할 수 없다는 것입니다.

+1

왜 그렇게하고 싶습니까? –

+0

DHeffernan에 동의합니다. 함수 환경에서 변수를 반환하려면 함수에서'return (x) '을 사용하십시오. (또는 변수 환경 할당 복잡한 일을 할) –

+0

아마도 당신이 _really_ 무엇을 원한다면 스크립트 파일, 함수, 그리고 그것을'소스()'그것보다는 넣어 궁금 해서요? – joran

답변

3

아니요, 가능하지 않다고 생각합니다. 업데이트 글쎄, 지금은 입니다 믿습니다. 아래를 참조하십시오.

f 함수가 실행되면 처음에는 매개 변수 값 (사용자의 경우 없음)이있는 로컬 환경이 만들어집니다. x에 대한 할당은 해당 로컬 환경에서 발생합니다.

f을 수정하면 원하는 것을 얻을 수 있습니다. 할당에서 기본 결과 눈에 보이지 않는 가치인가 - f의 원래 버전은 또한이 보이지 않게 3 만 을 반환

# Simply return the value: 
f <- function() { 
    x <- 3 
    x # returns x. return(x) also works fine. 
} 
f() # returns 3 

# Assign to global env 
f <- function() { 
    x <<- 3 # Assigns in global env - but see help("<<-") for details 
} 
f() 
x # 3 

# Return the local environment 
f <- function(foo=13) { 
    x <- 3 # local assignment 
    environment() # return the local environment 
} 

e <- f() 
e$x # 3 
e$foo # 13 

참고 : 여기에 대안의 몇입니다. 물론이 가능하며, 좀 더 그것에 대해 생각

f <- function(){ 
    x <- 3 
} 

print(f()) # 3 
a <- f() 
a # 3 

invisible(42) # won't show... 
print(invisible(42)) # ...but it's there! 

UPDATE : 특별한 기능, 그것을위한 invisible도 있습니다. 좀 더 흥미로운 기능을 만들어 보겠습니다 :

f <- function(a, b) { 
    cat("I got",a,"and",b,"\n") 
    x <- a+b 
} 

# Ensure there is no x to prove that the following works... 
rm(x) 

# First assign the input parameters to f. 
a <- 5 
b <- 3 

# Then evaluate the body. 
eval(body(f)) 
x # 8 
+0

eval (body (f))는 완벽한 감사입니다! – momeara