1
我想開發一個閃亮的應用程序,其中有多個選項卡上的數據輸入。每個標籤下的內容都能正常工作,但是當我嘗試將它們組合成一個應用程序時,我仍然會收到此錯誤。 match.arg(position)中的錯誤:'arg'必須爲NULL或字符向量。我的代碼如下:match.arg(位置)錯誤:'arg'必須爲NULL或字符向量
library(shiny)
library(shinydashboard)
library(ggvis)
sidebar <- dashboardSidebar(
hr(),
sidebarMenu(id="tabs",
menuItem("Import Data", tabName = "Import", icon=icon("list-alt")),
menuItem("Bivariate Regression", tabName="Bivariate Regression", icon=icon("line-chart")),
menuItem("Contingency", tabName = "Contingency", icon = icon("table"))
))
body <- dashboardBody(
tabItems(
tabItem(tabName= "Import",
sidebarLayout(
sidebarPanel(
fileInput("file","Upload the file"),
tags$hr(),
h5(helpText("Select the table parameters below")),
checkboxInput(inputId = 'header', label= 'Header', value= TRUE),
checkboxInput(inputId = "stringsAsFactors", "stringsAsFactors", FALSE),
br(),
radioButtons(inputId = 'sep', label = 'Seperator', choices = c(Comma=',', Semicolon=';', Tab='\t', Space= ' '), selected= ',')
),
mainPanel(
uiOutput("tb")
)
)),
tabItem(tabName= "Bivariate Regression",
sidebarLayout(
div(),
sidebarPanel(
fileInput('datfile', ''),
selectInput('x', 'x:' ,'x'),
selectInput('y', 'y:', 'y'),
uiOutput("plot_ui")
),
mainPanel(
titlePanel("Plot Output"),
ggvisOutput("plot")
)
))
))
dashboardPage(
dashboardHeader(title = "COBE Dashboard"),
sidebar,
body)
和服務器
library(shiny)
library(dplyr)
library(ggvis)
shinyServer(function(input, output){
#read the data and give import prefrences
data <- reactive({
file1 <- input$file
if(is.null(file1)){return()}
read.table(file=file1$datapath, sep= input$sep, header= input$header, stringsAsFactors= input$stringsAsFactors)
})
# display summary of table output
output$filledf <-renderTable({
if(is.null(data())){return()}
input$file
})
output$sum <- renderTable({
if(is.null(data())){return()}
summary(data())
})
output$table <- renderTable({
if(is.null(data())){return()}
data()
})
#generate tabsets when the file is loaded.
output$tb <- renderUI({
if(is.null(data()))
h2("App powered by", tags$img(src='Blue.png', height= 100, width=250))
else
tabsetPanel(tabPanel("About file", tableOutput("filledf")), tabPanel("Data", tableOutput("table")), tabPanel("Summary", tableOutput("sum")))
})
########## Data import end #########
########## Bivariate regression begin ###########
#load the data when the user inputs a file
theData <- reactive({
infile <- input$datfile
if(is.null(infile))
return(NULL)
d <- read.csv(infile$datapath, header = T)
d
})
# dynamic variable names
observe({
data<-theData()
updateSelectInput(session, 'x', choices = names(data))
updateSelectInput(session, 'y', choices = names(data))
}) # end observe
#gets the y variable name, will be used to change the plot legends
yVarName<-reactive({
input$y
})
#gets the x variable name, will be used to change the plot legends
xVarName<-reactive({
input$x
})
#make the filteredData frame
filteredData<-reactive({
data<-isolate(theData())
#if there is no input, make a dummy dataframe
if(input$x=="x" && input$y=="y"){
if(is.null(data)){
data<-data.frame(x=0,y=0)
}
}else{
data<-data[,c(input$x,input$y)]
names(data)<-c("x","y")
}
data
})
#plot the ggvis plot in a reactive block so that it changes with filteredData
vis<-reactive({
plotData<-filteredData()
plotData %>%
ggvis(~x, ~y) %>%
layer_points() %>%
add_axis("y", title = yVarName()) %>%
add_axis("x", title = xVarName()) %>%
add_tooltip(function(df) format(sqrt(df$x),digits=2))
})
vis%>%bind_shiny("plot", "plot_ui")
##### add contingency table ########
# display contingcy table output
output$foo <- renderTable({
if(is.null(data())){return()}
as.data.frame.matrix(table((data())))
})
})
謝謝你的忠告@Shiva。更新的代碼使應用程序運行,但是當我更改爲不同的選項卡時,雙變量回歸和應變表不會顯示出來。我想讓每個標籤都能正常工作。 –
我編輯了答案。現在檢查! – Shiva
非常感謝!它完美的作品,我不能更高興!感謝溼婆! –