我有以下数据:-
Var1 Freq year
1 United States 600015 1906
2 United States 533209 1811
3 China 465852 1906
4 China 438228 1811
5 Japan 117248 1906
6 Japan 109436 1811
7 France 67183 1906
8 Germany 60503 1811
9 Germany 59140 1906
10 France 43580 1811
所以我想绘制一个由1811和1906单选按钮组成的条形图,选择单选按钮1811应该打印处理后的数据框和带有1811值的数据条形图。
我正在尝试使用以下代码
ui <- fluidPage(
titlePanel(h1("Chart", align = "center", style = "color:black")),
sidebarLayout(
sidebarPanel(
radioButtons("radio","Radio buttons",choices = list("1906" = 1906, "1811" = 1811),selected = 1906),
actionButton("goButton","Analyze")),
mainPanel(
fluidRow(splitLayout(cellWidths = c("50%", "100%"),DT::dataTableOutput("mytable"),plotOutput("Plot",height=550)))
)))
server <- function(input, output) {
#yrdt <- filter(all_datay, all_datay$year %in% c('1906',''))
yrdt <- filter(all_datay, all_datay$year %in% c('input$radio')
pltyrdt <- head(yrdt,10)
output$mytable = DT::renderDataTable({
datatable(yrdt, class = 'cell-border stripe', colnames = c('Rank', 'Country', 'Freq', 'Year'))})
output$Plot <- renderPlot({
input$goButton
barplot(pltyrdt$Freq,names.arg=pltyrdt$Var1,horiz=F,xlab="Country",ylab="Freq", yaxs="i", xaxs="i")})
output$value <- renderPrint({ input$radio })
}
shinyApp(ui, server)
我遇到以下错误
错误:需要有限的“ xlim”值。
任何人都可以帮助我。
如果我仅选择1906年的数据,则输出如下图所示。
答案 0 :(得分:0)
有很多问题。
'input$radio'
用引号引起来。它是一个字符串,字面上是input$radio
(而不是值)。如果您删除引号('
),则会收到一条错误消息,告诉您实际上是什么问题,即input$radio
。 基本上,您在服务器设置过程中调用了一次filter
函数,并要求它获取年等于input$radio
的所有行(不是反应变量input$radio
的内容,但是文字字符串input$radio
)。因此,yrdt为空。
这里是一种选择:
server <- function(input, output) {
yrdt <- function() { filter(all_datay, all_datay$year %in% input$radio) }
output$mytable = DT::renderDataTable({
datatable(yrdt(), class = 'cell-border stripe',
colnames = c('Rank', 'Country', 'Freq', 'Year'))})
output$Plot <- renderPlot({
input$goButton
pltyrdt <- head(yrdt(),10)
barplot(pltyrdt$Freq,
names.arg=pltyrdt$Var1,
horiz=F,
xlab="Country", ylab="Freq",
yaxs="i", xaxs="i")
})
output$value <- renderPrint({ input$radio })
}
这里发生的是定义一个可以计算选择的函数,并在需要时调用该函数。由于它是在反应性环境(例如renderPlot()
)中调用的,因此input$radio
可以正常工作。
或者,您可以将yrdt
定义为反应表达式:
yrdt <- reactive({filter(all_datay, all_datay$year %in% input$radio) })
...
pltyrdt <- head(yrdt(),10)
(您可以像使用上面的函数一样使用它)。
有关发光here中反应性环境的更多信息。