2016-11-22 2 views
0

以下のスクリプトでは、ShinyがPostgresSQLのデータをリアクティブ関数としてフェッチしています。そのリアクティブ関数の出力を操作したいのです私たちはデータフレームで行います)、私はそれをrenderPlot関数に渡して、私が望む出力を得ることができます。Shinyのリアクティブ関数からデータを取得して同じDFに新しい列を作成する方法

私はこの作業をどのように行うかを教えてくれて本当に助けになります。リアクション機能の処理時にエラーが発生していると考えてエラーメッセージを表示していません。

ありがとうございました!高く評価。

#server side operation 

library(shiny) 
library(dplyr) 
library(ggplot2) 
library(DBI) 
library(RPostgreSQL) 

drv <- dbDriver("PostgreSQL") 
con <-dbConnect(drv,dbname = "", host = "valid credentials", port = 5439, 
      user = "USER", password = "password") 

dates <- seq(as.Date(as.character(Sys.Date() - 33)), as.Date(as.character(Sys.Date() - 1)), by = 1) 


shinyServer(function(input, output, session) { 

generate <- function(dates){ 

listofdfs <- list() #Create a list in which you intend to save your df's. 

for (i in 1:length(dates)){ 



data <- reactive({dbGetQuery(con, sprintf("select Column A, CAST (date AS date), id from My_Table 
             where id =", input$user_id," and 
             date <= '%s' and date >= '%s'- INTERVAL '7 days'", dates[i], dates[i])) 


data$Column_A_mean <- mean(data[,1]) #creating a new column like we do in a data frame (DF) 
    }) 

listofdfs[[i]] <- data() # save your dataframes into the list 
} 

return(listofdfs) #Return the list of dataframes. 
} 


df <- do.call("rbind", generate(dates)) 

output$Coolplot <- renderPlot({ 
ggplot(data = df, aes(date)) + 
    geom_line(aes(y = Column A, colour = "Column A"))+ 
    geom_line(aes(y = Column_A_mean, colour = "Column_A_mean")) 
    }) 

    }) 
+0

、むしろループを置きます反応性である。 – HubertL

+0

こんにちは@HubertL ...もう一度お返事ありがとうございます....私はなぜ私はループの中にリアクティブ関数を置く必要がありますまた、私はdfにリアクティブ関数から返された別の列を追加することができます教えてください....ありがとう –

答えて

1

はあなたがreactiveから関数を呼び出すことができ、たとえば、機能のうち、reactiveを配置する必要があります:あなたがループ内で反応性を置くことができない

shinyServer(function(input, output, session) { 

    generate <- function(dates){ 
    listofdfs <- list() #Create a list in which you intend to save your df's. 
    for (i in 1:length(dates)){ 
     data <- dbGetQuery(con, sprintf("select Column A, CAST (date AS date), id from My_Table 
               where id =", input$user_id," and 
               date <= '%s' and date >= '%s'- INTERVAL '7 days'", dates[i], dates[i])) 
     data$Column_A_mean <- mean(data[,1]) #creating a new column like we do in a data frame (DF) 
     listofdfs[[i]] <- data() # save your dataframes into the list 
    } 
    return(listofdfs) #Return the list of dataframes. 
    } 

    df <- reactive({do.call("rbind", generate(dates))}) 

    output$Coolplot <- renderPlot({ 
    ggplot(data = df(), aes(date)) + 
     geom_line(aes(y = Column A, colour = "Column A"))+ 
     geom_line(aes(y = Column_A_mean, colour = "Column_A_mean")) 
    }) 

}) 
+0

@HubertL ...あなたの答えをありがとうと私に助けを知っても助けて、 "どのように反応内部ループを置く"。私は前回のようにあなたの助けを感謝します!...非常にありがとう... :) –

+0

@HubertL ...私は1つの質問にこだわって、あなたが助けることができれば感謝します。私はエラーを取得し続けます "ggplot2 does notクラス・マトリックスのデータを扱う方法を知っている "....これがどうして起こっているのか? –

+0

代わりに 'as.data.frame(do.call ...'を試してみてください。 – HubertL

関連する問題