Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我';当试图将nlmrt对象转换为nls对象时,我在这里做错了_R_Nls_Non Linear Regression_Non Standard Evaluation - Fatal编程技术网

我';当试图将nlmrt对象转换为nls对象时,我在这里做错了

我';当试图将nlmrt对象转换为nls对象时,我在这里做错了,r,nls,non-linear-regression,non-standard-evaluation,R,Nls,Non Linear Regression,Non Standard Evaluation,我正在尝试使用nls2将“nlmrt对象转换为“nls”对象。但是,只有在调用中显式写入参数名称时,我才能做到这一点。我能否以编程方式定义参数名称?请参阅可复制的示例: library(nlmrt) scale_vector <- function(vector, ranges_in, ranges_out){ t <- (vector - ranges_in[1, ])/(ranges_in[2, ]-ranges_in[1, ]) vector <- (1

我正在尝试使用
nls2
“nlmrt
对象转换为
“nls”
对象。但是,只有在调用中显式写入参数名称时,我才能做到这一点。我能否以编程方式定义参数名称?请参阅可复制的示例:

library(nlmrt)

scale_vector <- function(vector, ranges_in, ranges_out){
    t <- (vector - ranges_in[1, ])/(ranges_in[2, ]-ranges_in[1, ])
    vector <- (1-t) * ranges_out[1, ] + t * ranges_out[2, ] 
}

shobbs.res  <-  function(x) {
    # UNSCALED Hobbs weeds problen -- coefficients are rescaled internally using
    # scale_vector

    ranges_in  <- rbind(c(0, 0, 0), c(100, 10, 0.1))
    ranges_out <- rbind(c(0, 0, 0), c(1, 1, 1)) 
    x <- scale_vector(x, ranges_in, ranges_out)

    tt <- 1:12
    res <- 100*x[1]/(1+10*x[2]*exp(-0.1*x[3]*tt)) - y }


y  <-  c(5.308, 7.24, 9.638, 12.866, 17.069, 23.192, 31.443, 
         38.558, 50.156, 62.948, 75.995, 91.972)
st  <-  c(b1=100, b2=10, b3=0.1)

ans1n <- nlfb(st, shobbs.res)
print(coef(ans1n))
但这会返回一个错误:

    Error in vector - ranges_in[1, ] : 
  non-numeric argument to binary operator 

是否可以修复此问题,而不必在调用
nls2
时显式硬编码参数名称?

nls2
将接受字符串作为公式:

co <- coef(ans1n)
fo_str <- sprintf("y ~ shobbs.res(c(%s)) + y", toString(names(co)))

nls2(fo_str, start = co, alg = "brute")
太好了:)非常感谢你在
R
中帮助我进行非线性回归,你是最棒的!
    Error in vector - ranges_in[1, ] : 
  non-numeric argument to binary operator 
co <- coef(ans1n)
fo_str <- sprintf("y ~ shobbs.res(c(%s)) + y", toString(names(co)))

nls2(fo_str, start = co, alg = "brute")
Nonlinear regression model
  model: y ~ shobbs.res(c(b1, b2, b3)) + y
   data: NULL
      b1       b2       b3 
196.1863  49.0916   0.3136 
 residual sum-of-squares: 2.587

Number of iterations to convergence: 3 
Achieved convergence tolerance: NA