2014-02-02 5 views
8

Я пытаюсь создать блестящее приложение, которое подмножает фрейм данных (включая строки, в которых категориальная переменная соответствует пользовательскому выбору ввода из пользовательского интерфейса) до данных обрабатывается на сервере, а затем визуализируется в пользовательском интерфейсе. Я пробовал несколько разных методов, но я продолжаю получать ошибки, например. «Объект типа„замкнутость“не subsettable»Подмножество фрейма данных на основе пользовательского ввода, Shiny

Тогда, когда я пытаюсь бросить реактивный пользовательский ввод с

target <- toString(reactive({input$value})) 

Я получаю следующее сообщение об ошибке:

«Ошибка в as.vector (x, "character"): не может принуждать тип 'замыкание' к вектору типа 'character' '

Любые идеи? Я думаю, что есть что-то концептуальное, что мне не хватает. Вот мой код:

#Server 
shinyUI(pageWithSidebar(

headerPanel("Pricing Analysis Tool"), 

sidebarPanel(
selectInput("fruit", "Select fruit:", 
      choices = c(inventory), selected = "banana", multiple = FALSE), 
numericInput("delta", "Price Change (%):", 10), 
submitButton("Run Simulation")), 

mainPanel(
plotOutput("PricePlot") 
))) 


#server 
shinyServer(function(input, output, session) { 

target_inventory <- reactive({inventory$product == input$fruit}) 
... 

}) 

После того, как мои данные инвентаризации подмножество включает продукт только я с оценкой, то я буду использовать renderPlot для создания графики. Я подвешиваю подмножество на основе пользовательского ввода. Есть ли какой-нибудь другой метод, который я должен использовать для динамического подмножества большего набора данных на основе пользовательского ввода?

спасибо за вашу помощь, Ноя

Update: Я был в состоянии успешно Подмножество мои данные на основе переменных данных, вводимых пользователем, а затем манипулировать подмножество и визуализировать его, используя этот код в моем файле сервера (спасибо , nivangio, для размещения кода, который я использовал в качестве шаблона на R-блоггер: http://www.r-bloggers.com/dashboards-in-r-with-shiny-and-googlevis/)

target_inventory <- reactive({ 
    a <- subset(inventory, inventory$product %in% input$fruit) 
    a <- droplevels(a) 
return(a) 
}) 

После того, как подмножество было создано, я был в состоянии использовать его в динамических графиках, ссылаясь как target_inventory()

+0

Просто в обратном порядке и делать 'целевой <- реактивная ({ToString (input $ value)}) ' – Ramnath

+0

Спасибо за быстрый ответ @Ramnath! Предполагая, что вход, выбранный в пользовательском интерфейсе, был «бананом», ожидаете ли вы, что печать (цель) вернет «банан»? Мне все еще не повезло ... –

+0

Вам нужно будет опубликовать код, чтобы мы лучше поняли контекст. В противном случае вы увидите много ответов, основанных на предположениях ваших потребностей. – Ramnath

ответ

6

У меня была такая же проблема, и я потратил пару часов, пытаясь понять это. После того, как вы назначили реактивный объект, вам нужно использовать target_inventory(), чтобы ссылаться на него (как упоминалось в блоке BenBarnes).

Вот ММВХ (минимальный рабочий пример)

ui.R

#ui 
library(shiny) 

shinyUI(fluidPage(
    #User dropbox 
    selectInput("state", "Choose state", choices=c("MA", "CA", "NY")) 
    #Print table to UI 
    ,tableOutput("table1") 
)) 

server.r

#server 
library(shiny) 

shinyServer(function(input,output){ 

    category <- c("MA", "CA", "NY") 
    population <- c(3,8,4) 

    df <- data.frame(category,population) 

    df_subset <- reactive({ 
    a <- subset(df, category == input$state) 
    return(a) 
    }) 

    output$table1 <- renderTable(df_subset()) #Note how df_subset() was used and not df_subset 


}) 
+0

Спасибо, решил аналогичный вопрос для меня. – Monduiz

+0

Когда я использую selectInput (multiple = TRUE), первые 2,3 выбора показывают таблицу подмножества со всеми 2-3 входами. После 4-го входа подмножество возвращает только новую строку и теряет предыдущие выборы. Любая подсказка о том, что может пойти не так? – Mandar

Смежные вопросы