2015-06-29 53 views
0

下面是我的代碼的簡化版本。我只是試圖讓Shiny將輸入值傳遞給rmongodb查詢,根據用戶輸入運行查詢,然後繪製變量的平均值。下面的代碼包括複製我的問題所需的一切,包括將文檔插入到集合中。將閃亮的UI文本輸入傳遞到rmongodb查詢

我會很感激任何幫助!我拉我的頭髮(並沒有太多的開始)。我懷疑我是不恰當地放置了reactive()命令或其他東西。

非常感謝誰能提供幫助。

#Install required packages and call each 
library(devtools) 
install_github(repo = "mongosoup/rmongodb") 
library(rmongodb) 
library(shiny) 

#Establish connection with mongodb, check status, name database and collection, insert some documents, return one document 
mongo <- mongo.create() 

mongo.insert(mongo, "simpledb.main",'{"user":"Joe", "age":34}') 
mongo.insert(mongo, "simpledb.main",'{"user":"Joe", "age":31}') 
mongo.insert(mongo, "simpledb.main",'{"user":"Joe", "age":53}') 
mongo.insert(mongo, "simpledb.main",'{"user":"Kate", "age":29}') 
mongo.insert(mongo, "simpledb.main",'{"user":"Lisa", "age":21}') 
mongo.insert(mongo, "simpledb.main",'{"user":"Henry", "age":34}') 
mongo.insert(mongo, "simpledb.main",'{"user":"David", "age":43}') 

if(mongo.is.connected(mongo) == TRUE) { 
    help("mongo.count") 
    mongo.count(mongo, "simpledb.main") 
} 

if(mongo.is.connected(mongo) == TRUE) { 
    mongo.find.one(mongo, "simpledb.main") 
} 

#Code needed for Shiny UI 
ui <- fluidPage(
    fluidRow(
    column(2, textInput(inputId = "userName", label = "", value = "Enter name here"))), 
    mainPanel(plotOutput(outputId = "main_plot")) 
) 

#Code needed for Shiny server 
server <- function(input, output) { 

    queryReactive <- reactive({ 
    nameFinal <- paste0(input$userName) 
    query = mongo.bson.buffer.create() 
    mongo.bson.buffer.append(query, "user", nameFinal) 
    query = mongo.bson.from.buffer(query) 
    }) 
#Run the query and store results as an R list object 
queryresults <- mongo.find.all(mongo=mongo, ns = coll, query=queryReactive) 

#Convert the R list object into a data frame 
resultsdf <- data.frame(matrix(unlist(queryresults), nrow=length(queryresults), byrow=T), stringsAsFactors=FALSE) 

    output$main_plot <- renderPlot({boxplot(as.numeric(resultsdf$X3))}) 

} 

#Code needed to call Shiny UI and server 
shinyApp(ui = ui, server = server) 

回答

0

在您的服務器功能中不需要反應式命令。我已簡化並更正了以下功能:

server <- function(input, output) { 

    output$main_plot <- renderPlot({ 
    nameFinal <- paste0(input$userName) 
    query = mongo.bson.buffer.create() 
    mongo.bson.buffer.append(query, "user", nameFinal) 
    query = mongo.bson.from.buffer(query) 
    queryresults <- mongo.find.all(mongo=mongo, ns = "simpledb.main", query=query) 
    if (length(queryresults) > 0) { 
     resultsdf <- data.frame(matrix(unlist(queryresults), nrow=length(queryresults), byrow=T), stringsAsFactors=FALSE) 
     boxplot(as.numeric(resultsdf$X3)) 
    } 
    else boxplot(c(0)) 
}) 

} 
+0

天才!奇蹟般有效。謝謝! –