如何将一个字符串从textInput传递给shinning R中的函数(如nls)

gkn4icbw  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(93)

我想写一个闪亮的应用程序,它应该计算非线性拟合函数的参数。为了计算nls,需要所使用的参数的起始值。因此,理想情况下,用户应该能够在一个textInput中编写公式,并在一个额外的textInput中设置所用参数的起始值,如a*x^2a=1
现在我很难将第二个textInput的条目传递给nls()start参数。
start=input$set_start不起作用,它说“无效的第一个参数”我试图通过noquote()as.name()摆脱报价,并试图用get()获得值,但它说“object 'a=1' not found”有人解决这个问题吗?
下面的示例在此设置中不起作用,但如果您直接设置起始值并键入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)

字符串

2skhul33

2skhul331#

我能找到的解决您问题的唯一直接方法是使用可怕的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)) )

字符串
更简单的替代方法是输入一个值而不是一个表达式,然后直接使用它-:)

相关问题