2017-07-19 123 views
0

我使用以下两种sliderInputs我的[R闪亮的应用[R闪亮的应用程序不输出

sliderInput("year", "Year:", 
      min=2006, max=2016, value=2006), 

sliderInput("month", "Month:", 
      min = 1, max = 212, value = 1) 

由用户指定的DF的位置,我有一个数据帧格式像下面...

Month 2006 2007 2008 
1  x1 y1 z1 
2  x2 y2 z2 
3  x3 y3 z3 
4  x4 y4 z4 
5  x5 y5 z5 

我想要做的是能够在应用程序上显示Month/Year选择的值。因此,例如,我这样做...

df[4,c("2006")] 

做上述将返回X4,行4(4个月)的价值在2006年列。然而当我尝试这在我server.R它不输出值。

shinyServer(
    function(input, output) { 

     output$calculated <- renderText({ 

     #giving names to the user inputs 
     Year <- input$year 
     Month <- input$month 

     paste(df[Month,c("Year")]) 

     }) 

    } 
) 

如何正确执行此操作,以便用户的选择将在df中的该位置输出正确的值?

+0

您正试图取回第二千○六data.frame的列,它真的那么大吗? 'df [4,“2006”]'工作吗? (顺便说一句:数字是列名或行名通常是有问题的,部分原因是因为这样,部分原因是因为打印时它们不包括实际使用它们进行索引所需的引号(''或''')。) – r2evans

+0

我的错是我的坏错误,是的,如果我在R脚本中做了df [4,“2006”],它会返回x4,这是我想要的值,但是当我尝试使用滑块实现这个功能时,返回任何值 – chrischrischris

+1

使用'df [4,as.character(输入$ year)]'。 – r2evans

回答

0

出现了一些问题,因为您使用的是通常认为是数值类型的列名......所以当它传递给您的过滤/子集操作时,会引发错误。如果你坚持在具有年列...你将需要强制到一个字符,为方便我发现使用subset功能在server

ui <- bootstrapPage(
    inputPanel(
    sliderInput("year", "Year:", 
       min=2006, max=2016, value=2006, ticks = FALSE,step = 1, sep = NA), 
    sliderInput("month", "Month:", 
       min = 1, max = 12, value = 1) 
), 
    mainPanel(width = 12, 
      column(6, htmltools::tags$h3('Original Data Frame'), 
      tableOutput('original_d')), 
      column(6, style="padding-left:15%;", 
        htmltools::tags$h3('Filterted Result'),tableOutput('the_d')) 
    ) 
) 


# Helps to create bs data 
fr <- function(nx = 1){ 
    l <- c('c','x','v')[sample(1:2, 1)] 
    n <- sample(1:14, 1) 
    v <- sprintf("%s%s", l, n) 
    if(nx > 1){ 
    append(v, sapply(1:(length(v) - nx), fr)) 
    }else { 
    v 
    } 
} 

# Our index data.frame 
var_df <- as.data.frame(
    append(list(1:12), 
     lapply(1:11, function(i){ 
      fr(10) 
      }) 
     )) %>% 
    setNames(c('Month', as.character(2006:2016))) 

server <- function(input, output, session) { 
    output$original_d <- renderTable({ 
    var_df 
    }) 
output$the_d <- renderTable({ 
    subset(var_df, Month == input$month, as.character(input$year)) 
}) 

} 

# Run the application 
shinyApp(ui = ui, server = server) 

screenshot

相关问题