我想编写一个闪亮的应用程序,它应该计算非线性拟合函数的参数。要计算 nls,需要使用参数的起始值。因此,理想情况下,用户应该能够在一个 textInput 中编写一个公式,并在一个额外的 textInput 中设置所用参数的起始值,例如a*x^2
和a=1
。
现在我有一个很难通过第二为textInput到入口start
的说法nls()
。
start=input$set_start
不起作用,它说“无效的第一个参数”我试图通过noquote()
和摆脱引号as.name()
并尝试使用它来获取值,get()
但它说“找不到对象'a = 1'”有没有人可以解决此任务?
下面的示例在此设置中不起作用,但是如果您直接设置起始值并输入a=1
而不是start=input$set_start
它起作用
library(shiny)
ui <- fluidPage(
mainPanel(
textInput("set_start","set startparameters",value = "a=1"),
verbatimTextOutput("nls_summary")
)
)
server <- function(input, output) {
df<-data.frame(y=c(1,3,8,17,26),x=c(1,2,3,4,5))
output$nls_summary<-renderPrint({
nls(formula="y~a*x^2",
data=df,
start=input$set_start)
})
}
shinyApp(ui = ui, server = server)
我能找到的解决您问题的唯一直接方法是使用 dreaded 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)) )
更简单的替代方法是输入一个值而不是一个表达式并直接使用它-:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句