2017-07-19 430 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

相關問題