我正在尝试从表中获取colnames,然后每个都产生我需要的许多复选框。但是,我继续收到以下错误:
match.arg(位置)出错:' arg'必须为NULL或字符向量
这是我的代码:
lemon<-read.csv("LemonData.csv")
csvuploaded<-TRUE
shinyApp(
ui = fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput(outputId="factorcheckboxes")
)
)),
server = function(input, output) {
output$factorcheckboxes <- renderUI({
if(is.null(csvuploaded))
return(NULL)
if(!(is.null(csvuploaded)))
collen<-length(colnames(lemon))
factornames<-vector()
for(i in 1:collen){
factornames<-c(factornames,colnames(lemon)[i])
}
checkboxGroupInput(inputId="variable",label="Variable:",choices=as.list(factornames),selected=NULL,inline=FALSE)
})
})
当我尝试运行给定here的示例时,我收到类似的错误。我无法在错误中查明代码中的源代码,并且在调试Shiny时我不确定如何使用断点。
更新: 要求的LemonData.csv样本:
------------------------------------------
Response | Factor 1 | Factor 2 | Factor 3
------------------------------------------
5 | 2 | 5 | 2
------------------------------------------
7 | 1 | 4 | 3
------------------------------------------
答案 0 :(得分:3)
您的服务器功能可以更加简单,只需将colnames(lemon)
传递给choices
参数,就不需要for
循环。此外,您正在检查TRUE / FALSE is.null
这是不正确的,因为TRUE和FALSE都不是NULL。
lemon <- read.table(text="Response, Factor 1, Factor 2, Factor 3
5, 2, 5, 2
7, 1, 4, 3", header=T, sep=",")
csvuploaded<-FALSE
shinyApp(
ui = fluidPage(
sidebarLayout(
sidebarPanel(
radioButtons("csvuploaded", "uploaded", c(T, F)), # change csvuploaded
uiOutput(outputId="factorcheckboxes")
),
mainPanel()
)),
server = function(input, output) {
output$factorcheckboxes <- renderUI({
if(input$csvuploaded) {
checkboxGroupInput(inputId="variable",
label="Variable:",
choices=colnames(lemon), selected=NULL, inline=FALSE)
} else { NULL }
})
}
)
答案 1 :(得分:0)
我无法重现错误,但我能够使用下面的代码生成复选框。唯一的问题是缺少mainPanel
参数,因为您使用的是sidebarLayout
。
lemon<-read.csv("LemonData.csv")
csvuploaded<-TRUE
library(shiny)
shinyApp(
ui = fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput(outputId="factorcheckboxes")
),
mainPanel(
)
)),
server = function(input, output) {
output$factorcheckboxes <- renderUI({
if(is.null(csvuploaded))
return(NULL)
if(!(is.null(csvuploaded)))
collen<-length(colnames(lemon))
factornames<-vector()
for(i in 1:collen){
factornames<-c(factornames,colnames(lemon)[i])
}
checkboxGroupInput(inputId="variable",label="Variable:",choices=as.list(factornames),selected=NULL,inline=FALSE)
})
})
我生成了一个&#34; LemonData.csv&#34;根据提供的表格,看起来像:
Response, Factor 1, Factor 2, Factor 3
5, 2, 5, 2
7, 1, 4, 3