2010-06-04 5 views
7

approxfun()에 정의 된대로 저장된 함수가 들어있는 일부 .Rdata 파일이 있습니다. 기존 함수 개체의 본문 수정

저장 파일 사전 최신 패키지 "기본"에서 "통계"를 approxfun하여 변경 등 신체의 일부

PACKAGE = "base" 

을 가지고 있으며, 잘못된 패키지는 함수가 실패합니다. 나는 (myfun)을 고칠 수 있고 단순히 "base"를 "stats"로 바꿀 수 있지만, 나는 더 깔끔한 자동적 인 방법을 원한다.

어떻게 든 gsub() 및 body()를 사용하여 이것을 수행 할 수 있습니까?

나는

as.character(body(myfun)) 

과 본문 텍스트가 대체를 얻을 수 있지만, 나는 다시 "전화"와 정의를 교체로 설정하는 방법을 모르겠어요.

(나는 더 나은 솔루션이 원래 approxfun에 의해 단순히 기능을 다시 사용되는 데이터를 저장 한하는 것을 알고,하지만 기존 하나를 수정하는 합리적인 방법이 있는지 궁금합니다.)

편집 : 내가 발견 그것은 여기

What ways are there to edit a function in R?

+0

가능한 중복 http://stackoverflow.com/questions/2458013/what-ways-there-to-a-function-in-r) –

+0

'body (foo) <- gsub ("PACKAGE = 'base'", "PACKAGE = 'stats'" , body (foo))'를 사용하지만 body()는 텍스트를 반환하지 않으므로 텍스트 조작을 사용하여 변경할 수 없습니다. @MrFlick –

+2

으로 이것을 확인한 다음 자신의 답변을 작성하여이 게시물이 더 이상 "답이 없음"이되지 않도록 할 수 있습니까? –

답변

3

substitute 기능을 사용합니다.

> body(myfun)[[2]][[3]][[2]] 
x + y 

이를 변경하면, 당신은을 사용해야합니다

myfun <- function(x,y) { 
    result <- list(x+y,x*y) 
    return(result) 
} 

당신이 함수에서 변경하려면 무엇을 선택하는 목록으로 myfun 치료, body 사용 : 예를 들어

substitute 함수를 사용하므로 함수의 일부를 call 또는 name 개체로 적절하게 바꿉니다. 함수는 문자열로 저장되거나 문자열로 작동하지 않으므로 문자열로 대체하는 것은 작동하지 않습니다.

body(myfun)[[2]][[3]][[2]] <- substitute(2*x) 

는 이제 함수의 선택 조각은 대체되었습니다 :

> myfun 
function (x, y) 
{ 
    result <- list(2 * x, x * y) 
    return(result) 
} 
[? R의 함수가 편집 할 수있는 방법은 무엇]의 (
관련 문제