2017-07-14 50 views
0

我想寫一個閃亮的應用程序,它應該計算非線性擬合函數的參數。爲了計算nls,需要使用參數的起始值。因此,理想的情況是,用戶應該能夠在一個textInput中編寫公式,並在額外的textInput中設置所用參數的起始值,如a*x^2a=1如何從textInput傳遞字符串到閃亮的R中的函數(如nls)

現在我很難通過第二個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) 

回答

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))) 

簡單的替代方案將是輸入一個值,而不是一個表達式,並直接使用它 - :)

+0

謝謝! :)完美的作品。我的目的是讓應用更加靈活,以便用戶可以插入任意數量的參數,只要他設置一個起始值即可。 另一種方法是靈活的uiOutput,它會爲每個使用的參數生成一個textInput來設置開始值。 但我認爲這個解決方案更直接;) –

相關問題