我想写一个闪亮的应用程序,它应该计算非线性拟合函数的参数。要计算nls,需要使用参数的起始值。因此,理想情况下,用户应该能够在一个textInput中编写公式,并在额外的textInput中设置已使用参数的起始值,例如a*x^2
和a=1
。
现在我很难将第二个textInput的条目传递给start
的{{1}}参数。
nls()
不起作用,它说"无效的第一个参数"我试图通过start=input$set_start
和noquote()
摆脱引用,并尝试使用as.name()
获取值,但是它说'#34; object' a = 1&#39 ;找不到"有没有人为这项任务提供解决方案?
以下示例无法在此设置中使用,但如果您直接设置起始值并输入get()
而不是a=1
则可以使用
start=input$set_start
答案 0 :(得分:0)
我能找到的问题的唯一直接解决方案是使用可怕的eval(parse(text="xyzzy"))
,这最初看起来有点过分。
此外,要正确构建list
,最好eval解析整个表达式,如start = list(a=1)
。
st <- paste0("list(",input$set_start, ")")
nls(formula="y~a*x^2",
data=df,
start=eval(parse(text=st)) )
更简单的替代方法是输入值而不是表达式并直接使用它 - :)