2013-04-16 1 views
2

I는 nls을 이용하여 파라 메트릭 함수에 적합했으며, 지금은 다시 치환 학습 매개 변수 함수의 식을 인쇄하려면 예를 들어.`nls`의 R 표현이 맞습니까?

x <- runif(100, 0, 100) 
m <- 13 * exp(-0.05 * x^2) + 0.1 + runif(100,0,0.1) 
mod <- nls(m ~ a*exp(-b*x^2)+c, start=list(a=10,b=0.1,c=0.1)) 

내가 좋아 식 및 계수를 추출 할 수있다 그래서 :

formula(mod) 
# m ~ a * exp(-b * x^2) + c 
coef(mod) 
#   a   b   c 
# 13.00029360 0.04975388 0.14457936 

그러나 나는 그들을 직접 바꿀 방법이 없습니다. 여기

substitute(m ~ a * exp(-b * x^2) + c, as.list(round(coef(mod), 4))) 
# m ~ 13.0003 * exp(-0.0498 * x^2) + 0.1446 

내 궁극적 인 목표는 디스크에 RDS 파일에서 장착 nls 객체를 읽어와 org-mode 문서의 기능적인 표현을 보여주는 것입니다 : 내가 할 보일 수있는 유일한 방법은 다시 공식을 작성하는 것을 포함한다.

+0

패키지 저자의 요청에 좋은 일을 불러옵니다. –

+0

그것은 좋을 것입니다. 이 경우 패키지 작성자는 R 핵심 팀이지만, 나는 받아 들여질 것이라고 낙관하지 않습니다. –

답변

4

이게 당신이 찾고 있는게 있나요?

do.call(substitute, args=list(formula(mod), as.list(round(coef(mod),4)))) 
# m ~ 13.0097 * exp(-0.0501 * x^2) + 0.1536 

do.callargs 내의 인수 모두를 평가하고 만 다음 식으로 표현 계수를 대체 할 substitute()를 사용하기 때문에 작동. 즉, do.call() 궁극적으로 평가하는 표현이 원하는대로,이 다음과 같습니다 splinefun`와`approxfun``에`nslfun` 상당을 제공

as.call(list(substitute, formula(mod), as.list(round(coef(mod),4)))) 
# .Primitive("substitute")(m ~ a * exp(-b * x^2) + c, list(a = 13.0097, 
# b = 0.0501, c = 0.1536)) 
+0

아하! 그래, 그거야, 고마워. 나는'substitute()'를 두 번이나'eval()', 또는 ....로 호출하려고 애썼다. –

+0

@KenWilliams - Funny. 'R-lang 매뉴얼의이 섹션에있는 네 번째 코드 블록을 보라. (http : //cran.r-project.org/doc/manuals/r-release/R-lang.html#Substitutions)) 거의 이해하기 쉽지 않습니다. 이 경우'eval (substitute (X, as.list (round (coef (mod), 4)), list (X = formula (mod))))') 함수는 거의 완벽하게 불투명하다. –

+0

'pryr :: substitute2 (mod $ call $ formula, as.list (round (coef (mod), 4)))'와 같이 좀 더 쉽게하기 위해'substitute2'를 썼다. 베이스 R에는 정규 평가 규칙을 대체 할 수있는 버전이 없다는 사실에 실망 스럽습니다. – hadley