我有一个Excel电子表格,其中包含2列" Alpha1"和" Beta2"。
我想使用R闪亮在直方图上绘制每一列。以下是我的代码:
install.packages("shiny","magrittr", "ggplot2")
library(shiny)
library(magrittr)
library(ggplot2)
data<-read.csv(file='testdata.csv', stringsAsFactors = FALSE, sep=",")
ui<-fluidPage("data",
#define UI,
titlePanel(title="Excel data"),
selectInput("data$Alpha1", "data$Beta2"),
mainPanel("excel data main panel",
plotOutput("data$Alpha1"),
plotOutput("data$Beta2"))
)
server<-function(input,output) {
output$data <- renderPlot({plot(data$Alpha1),
plot(data$Beta2)})
})
shinyApp(ui=ui, server=server)
是否有人能够指出为什么这不起作用?
我也遇到了错误:
shinyApp(ui = ui,server = server)中的错误:object&#39; server&#39;找不到
答案 0 :(得分:0)
您的代码表明缺乏对Shiny如何工作的基本理解。所有用户界面输入(selectInput
,numericInput
等)都有inputId
个,所有用户界面都通过input
在服务器层中使用(plotOutput
,verbatimOutput
等等)都有outputId
个,通过output
在服务器层中使用。这些ID是字符串,被视为data.frame中的列名称(其中data.frame为input
或output
)。
因此,您所拥有的代码存在很多错误,因此我会一次性分解您的代码并解释错误。由于我没有您的数据集,我将把它用于数据
data<-data.frame(Alpha1 = runif(100),Beta2 = rnorm(100))
从?fluidPage
我们看到它首先需要...
并且有一些命名参数,title
就是其中之一。因此,您在开头浮动的随机"data"
需要变为title="data"
。
接下来,?selectInput
需要三件事 - inputId
,label
和choices
。 inputId
是您在服务器中引用UI对象的方式。因此,selectInput('si1','First Select Input',list(choice1="Choice 1", choice2="Choice 2")
将生成一个带有可见标签的下拉框&#34; First Select Input&#34;和选择。在代码的服务器部分,您可以使用input$si1
引用它。
现在,您有两个plotOutput
。从?plotOutput
开始,我们看到第一个参数是outputId
。因此,plotOutput('Alpha1')
将在服务器端引用为output$Alpha1
。如果您plotOutput("data$Alpha1")
,您已创建了一个必须作为
output$`data$Alpha1`
最后,您有两个plotOutput
但只有一个renderPlot
,每个plotOutput
需要一个renderPlot
。此外,每个ui<-fluidPage(title = "data",
titlePanel(title="Excel data"),
selectInput("si1","Select Column",list("Alpha1", "Beta2")),
mainPanel("excel data main panel",
plotOutput("Alpha1"),
plotOutput("Beta2"))
)
server<-function(input,output) {
output$Alpha1 <- renderPlot({plot(data$Alpha1)})
output$Beta2 <- renderPlot({plot(data$Beta2)})
}
shinyApp(ui=ui, server=server)
只能生成一个绘图,因此生成多个只会返回最后一个(就像R中的函数如何自动返回最后一行)。
将所有这些放在一起,您将获得以下代码:
harp