使用actionButton
调用NULL
作为按钮ID在控制台中正常工作(它只是不创建ID):
> library(shiny)
> actionButton(NULL, "Label1")
<button type="button" class="btn btn-default action-button">Label1</button>
但是从服务器调用它会导致错误:
Browse[1]> actionButton(NULL, "label1")
Error in exists(name, envir = private$values) : invalid first argument
示例app:
ui <- function() {
fluidPage()
}
server <- function(input, output, session) {
browser()
}
runApp(list(ui = ui, server = server))
有人能解释一下这种行为吗?
答案 0 :(得分:1)
HTML
画布上的每个元素都必须有一个与之关联的唯一id
:http://www.w3.org/TR/html5/dom.html#the-id-attribute:
id属性指定其元素的唯一标识符(ID)。该 value必须在元素的home子树中的所有ID中唯一 并且必须至少包含一个字符。该值不得包含 任何空格字符。
由于您尝试使用上面的标记向页面呈现内容,因此规则适用于所有shiny
个应用
答案 1 :(得分:0)
我最好的猜测是它与 exists 函数连接,该函数由服务器在 actionButton 函数的 inputId 参数上调用。< / p>
见错误,请:
Listening on http://127.0.0.1:5515
Warning: Error in exists: invalid first argument
Stack trace (innermost first):
87: exists
86: self$exists
85: oldInputs$available
84: restoreInput
83: actionButton
82: renderUI [#10]
81: func
80: origRenderFunc
79: output$moreControls
4: <Anonymous>
3: do.call
2: print.shiny.appobj
1: <Promise>
如果你打电话:
> exists( NULL)
Error in exists(NULL) : invalid first argument
我使用此代码生成上述错误消息:
if (interactive()) {
ui <- fluidPage(
uiOutput("moreControls")
)
server <- function(input, output) {
output$moreControls <- renderUI({
actionButton( NULL, "label1")
})
}
shinyApp(ui, server)
}