我想写一个闪亮的应用程序,它应该计算非线性拟合函数的参数。为了计算nls,需要所使用的参数的起始值。因此,理想情况下,用户应该能够在一个textInput中编写公式,并在一个额外的textInput中设置所用参数的起始值,如a*x^2
和a=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)
字符串
1条答案
按热度按时间2skhul331#
我能找到的解决您问题的唯一直接方法是使用可怕的
eval(parse(text="xyzzy"))
,它最初看起来有点大材小用。此外,要正确构建
list
,最好eval解析整个表达式,如start = list(a=1)
。字符串
更简单的替代方法是输入一个值而不是一个表达式,然后直接使用它-:)