我有一个Excel电子表格,包含两列"Alpha1"one_answers"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):找不到对象"server">
您的代码表明对Shiny的工作原理缺乏基本的了解。所有UI输入(selectInput
、numericInput
等…)都具有通过input
在服务器层中使用的inputId
,而所有UI输出(plotOutput
、verbatimOutput
等…)均具有通过output
在服务器层使用的outputId
。这些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")
将生成一个下拉框,其中包含可见的标签"First Select Input"和选项。在代码的服务器部分,您将能够使用input$si1
引用它。
现在,您有两个plotOutput
。从?plotOutput
中,我们可以看到第一个自变量是outputId
。因此,plotOutput('Alpha1')
在服务器端将被引用为output$Alpha1
。如果你有plotOutput("data$Alpha1")
,你就创建了一个标签,必须被引用为
output$`data$Alpha1`
最后,您有两个plotOutput
,但只有一个renderPlot
,每个plotOutput
需要一个。此外,每个renderPlot
只能生成一个图,因此生成多个图将只返回最后一个图(就像R中的函数如何自动返回最后一行一样)。
把这些放在一起,你就得到了下面的代码:
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)