2016-12-27 16 views
1

У меня есть следующий набор данные:Печати таблица данных в блестящем, используя определенный пользователь подмножество

df <- data.frame(x = gl(n = 2, k = 10, labels = c(0, 1)), 
       y = gl(n = 4, k = 5, labels = c('hi', 'bye', 'wee', 'whoa'))) 

Я создал блестящее приложение, которое позволяет пользователю выбрать любого из переменного кадра данных. После выбора переменной появляются переключатели. Я хотел бы, чтобы пользователь мог выбирать значения с помощью переключателей, которые затем будут использоваться для подмножества кадра данных и, в конечном счете, распечатать результат в таблице данных. Код, который я до сих пор выглядит следующим образом:

server.R

library(tidyr) 
library(dplyr) 

df <- data.frame(x = gl(n = 2, k = 10, labels = c(0, 1)), 
       y = gl(n = 4, k = 5, labels = c('hi', 'bye', 'wee', 'whoa'))) 

function(input, output) { 

    # Select specification of features for subsetting 
    output$ui <- renderUI({ 

    # Get length of features selected 
    numVar <- length(as.integer(input$in0)) 

    # Create n radioButtons based on number of features selected 
    lapply(input$in0, function(x) { 
      list(radioButtons(paste0("dynamic", x), x, 
          choices = c("zero" = "0", 
             "one" = "1"), 
          selected = "0")) 
    }) 
}) 

output$mytable = renderDataTable({ 
     df 
    }) 

} 

ui.R

library(tidyr) 
library(dplyr) 

df <- data.frame(x = gl(n = 2, k = 10, labels = c(0, 1)), 
       y = gl(n = 4, k = 5, labels = c('hi', 'bye', 'wee', 'whoa'))) 

fluidPage(
    br(), 
    fluidRow(
    column(3, 
     h2('Test subset'), 

     # Drop down of all features 
     selectInput(inputId = 'in0', label = 'Choose features', 
        choices = colnames(df), 
        multiple = TRUE, selectize = TRUE), 

     # Radio buttons for features 
     wellPanel(uiOutput("ui")) 
    ), 
    column(9, 
      dataTableOutput('mytable') 
    ) 
) 
) 

В частности, я не знаю, как получить доступ к выбору пользователя от переключателей, чтобы подмножить таблицу данных df в файле server.R. В этом случае необходимо, чтобы подмножество работало с переменной x. То есть, который состоит из 0 и 1, но он должен потенциально иметь возможность работать со многими переменными. Таким образом, код подмножества должен учитывать, сколько переменных выбрал пользователь.

+1

Я думаю, что вы должны хранить 'ввода $ in0' как статический омическим переменной, используя' isolate', так что вы знаете, что имена радио-кнопок. то есть. вам нужно получить доступ к 'input $ dynamicx', где вы определили dynamicx в функции lapply. – Jean

ответ

1

Что-то вроде этого?

server.R

function(input, output) { 
    # Select specification of features for subsetting 
    output$ui <- renderUI({ 
    lapply(input$in0, function(var) { 
     list(radioButtons(paste0("dynamic_", var), label = var, 
         choices = levels(df[[var]]))) 
    }) 
    }) 

    output$mytable = renderDataTable({ 
    if(is.null(input$in0)) return(df) 
    sub <- function(data, var) { 
     idx <- data[[var]] == input[[paste0("dynamic_", var)]] 
     data[idx, ] 
    } 
    Reduce(f = sub, init = df, x = input$in0) 
    }) 
} 
+0

Красивые. Это именно то, что я искал. Существует ли нетривиальный способ, чтобы таблица данных выводила только первый столбец кадра данных? – babylinguist

+1

Существует много способов сделать это. Легче было бы добавить '['x']'. Но вы можете использовать пакет DT (http://stackoverflow.com/questions/32409194/hide-certain-columns-in-a-responsive-data-table-using-dt-package) – user5029763