2016-10-27 70 views
0

在R中運行下面的代碼中閃亮:匹配錯誤(el,set,0L):'匹配'需要向量參數嗎?

client_report_type = reactive({ input$report_type }) 
    if (is.element(client_report_type,"Enterprise_user")) 

... 

我遇到了以下錯誤消息:

Error in match(el, set, 0L) : 'match' requires vector arguments 

有誰知道這是什麼意思,以及如何解決這個問題呢? 謝謝!

+0

'client_report_type'不是一個載體,因爲它規定 - 它可能是一個函數或一些其他類的對象是'匹配()'(這是由'is.element'調用)無法理解。例如,我可以通過執行'is.element(mean,1:5)' – thelatemail

+0

來複制錯誤。謝謝。看起來client_report_type是一個「閉包」。我如何從關閉中獲取字符串或數字?不應該反應函數返回一個字符串或整數,如果實際輸入是一個字符串或整數? – user321694

+0

我不知道 - 我從來沒有用過閃亮的,但我想你需要看看什麼'反應'返回 - 請參閱'?反應'的「價值」部分我猜想要掌握它。 – thelatemail

回答

0

您不需要將輸入內置於反應器以獲取值,但輸入應位於反應式表達式內。反應式表達式以外的任何內容只會在閃亮的應用啓動時執行一次。如果您嘗試在反應表達式外使用input值,則會出現錯誤。根據你要用input$report_type做什麼,你可以把它放在reactive(當然),observeobserveEvent

下面是一些基本的例子:

反應:

dat <- reactive({ 
    if (is.element(input$report_type,"Enterprise_user")) { 
    ... 
    myData 
    } else { 
    NULL 
    } 
}) 

觀察:

observe({ 
    if (is.null(input$report_type)) 
    return() 

    if (is.element(input$report_type,"Enterprise_user")) 
    ... 
}) 

observeEvent:

observeEvent(input$report_type, { 
    if (is.element(input$report_type,"Enterprise_user")) 
    ... 
}) 

這裏是關於偉大的教程有光澤和反應:http://deanattali.com/blog/building-shiny-apps-tutorial/#reactivity-101