2016-07-06 4 views
1

私は最初のShinyアプリケーションを書いています。コードの要点は、csvファイルで読み込むことです。ユーザーはアプリからいくつかの入力に答え、それらのデータはcsvファイルに追加されます。このファイルは日々保存され、アプリはコンテンツを更新することを意図しています。このファイルは、後で分析のために使用されます。Shinyアプリが動作するためには、どのように2つの異なるデータフレームで名前を同じにしますか?

私のアプリはこれを最初に開いたときに正常に実行します。ただし、セッションを閉じて後で使用するために再度開くと(ランチ前にアプリを閉じて昼食後に再度開くと想像してください)、「エラー:名前が以前の名前と一致しません」という理由でCSVファイルを追加できなくなります。

最初に、「空の」.csvファイルに、log.csvという3つの列(A、B、C)を持つヘッダー行があります。

次に、次のコードを使用してShiny Appを作成します。

library(shiny) 

ui <- fluidPage(

    # Application title 
    titlePanel("My 1st App"), 

    #Enter Agent 
    selectInput(inputId = "a", "A", c("Choose one" = "","A1", "A2", "A3"), 
     multiple = FALSE, selectize = TRUE, width = NULL, size = NULL), 

    #Enter Concentration 
    numericInput(inputId = "b", "Favorite Number", NULL, min = 0, max = NA), 

    #Enter Detection 
    radioButtons(inputId = "c", "Are you Happy Y/N", c("Y", "N")), 
    actionButton(inputId = "submit", "Submit", icon = NULL, width = NULL), 
    verbatimTextOutput("summary"), 

    log <- read.table("V:\\My\\Path\\log.csv",sep=",",header=T) 

) 


server <- function(input, output) { 
    data <- eventReactive(input$submit, {   
     t <- cbind(input$agent,input$conc, input$detect) 
     names(t) <- c("A","B","C") 
     t   
    }) 


    output$summary <- renderPrint({data() #outputs data in allotted field. 

     write.table(rbind(log,data()), file="V:\\My\\Path\\log.csv", sep=",", 
          col.names= FALSE, row.names=F, append = T) 
     }) 

} 
shinyApp(ui = ui, server = server)' 

log.csvは、ログデータフレーム内の名前は、反応性のデータから名前と一致していないので、A、B、Cの

エラーが明らかに発生したヘッダを持つオリジナルの空のファイルであります()。平野Rで

、私はこのコードで問題を解決することができますので、

log <- data.frame(read.table("V:\\My\\Path\\log.csv",sep=",",header=T)) 
names(log) 

a <- c("A1", "A3", "A2") 
b <- c(0,1,2) 
c <- c("y","n","n") 
t <- data.frame(cbind(a,b, c)) 
names(t) <- c("A","B","C") 
t 
rbind(log,t) 

、私はこのロジックを使用しようとしたとサーバセクション内の更新反応性データのステートメント(コード上では既にこのアップデートを反映しています) 。アプリが閉じられてから再び開いてもまだ動作しません。以前のデータをログに記録しておくと、名前が一致しないことがわかりません。

何か助けていただきありがとうございます。私は数日間苦労し、多くの記事を研究しました。これは私の最初の投稿ですので、私が正しく従わなかった礼儀を許してください。しかし、私は質問を投稿したり質問したりするより適切な方法で優しく微調整するのがうれしいです。

答えて

2

observeEventとアプリで出力が必要ない場合はお試しください。 (私はそれを簡単にするためにコードを少し変更しましたが、アイデアは同じです)。

library(shiny) 
path <- "your path" 
log <- read.csv(paste0(path,"log.csv")) 

ui <- fluidPage(

    # Application title 
    titlePanel("My 1st App"), 

    #Enter Agent 
    selectInput(inputId = "a", "A", c("Choose one" = "","A1", "A2", "A3"), 
      multiple = FALSE, selectize = TRUE, width = NULL, size = NULL), 

    #Enter Concentration 
    numericInput(inputId = "b", "Favorite Number", NULL, min = 0, max = NA), 

    #Enter Detection 
    radioButtons(inputId = "c", "Are you Happy Y/N", c("Y", "N")), 
    actionButton(inputId = "submit", "Submit", icon = NULL, width = NULL) 
) 

server <- function(input, output) { 

    observeEvent(input$submit, { 
    t <- data.frame(A= input$a, B = input$b, C= input$c) 
    data <- rbind(log,t) 
    write.csv(data, file=paste0(path,"log.csv"),row.names=F) 
    }) 
} 

shinyApp(ui = ui, server = server) 
+0

ありがとうございました。これはほとんど動作します。私はいくつかの周りに私が修正することができます参照してください混乱します。良いニュース:再び開いたときにクラッシュすることはありません。悪いニュース:余分な時間を開いた後、追加すると、前のすべてのデータが繰り返し追加されます。たとえば、最初のインスタンスに3つの観測があった場合、そのアプリケーションは終了しています。アプリの次のインスタンスでは、アプリを1回新たに使用した後、7つの観測結果が表示されます(最初の3回、最初の3回の繰り返し、新しい観測)。私はそれを続けるつもりですが、あなたが解決策を持っていれば私はそれを取るでしょう。再度、感謝します。 –

+0

はい!!!!!ありがとうD!これはうまくいった。その後、上記の私の問題にさらに答えるために、rbind(log、t)には愚かでした。 .csvへのappendによる書き込みはすでにバインドされていました。再度、感謝します! –

+0

それを聞くのは素晴らしいです!答えが役に立つ場合は、その横のチェックマークをクリックして回答を受け入れることができます。 –

1

私が最終的な解決策を投稿している他の人のために。これは、D. Alburezの返答なしにはできなかった。私が探していた答えを得るためにコードを修正しました。

library(shiny) 
path <- "your path" 
log <- read.csv(paste0(path,"log.csv")) 

ui <- fluidPage(

    # Application title 
    titlePanel("My 1st App"), 

    #Enter Agent 
    selectInput(inputId = "a", "A", c("Choose one" = "","A1", "A2", "A3"), 
      multiple = FALSE, selectize = TRUE, width = NULL, size = NULL), 

    #Enter Concentration 
    numericInput(inputId = "b", "Favorite Number", NULL, min = 0, max = NA), 

    #Enter Detection 
    radioButtons(inputId = "c", "Are you Happy Y/N", c("Y", "N")), 
    actionButton(inputId = "submit", "Submit", icon = NULL, width = NULL) 
) 

server <- function(input, output) { 

    observeEvent(input$submit, { 
    data <- data.frame(A= input$a, B = input$b, C= input$c) 
    write.table(data, file=paste0(path,"log.csv"), sep=",", 
       col.names= FALSE, row.names=F, append = T) 
    }) 
} 

shinyApp(ui = ui, server = server) 

ありがとうD!今すぐ次の問題に出ます....

関連する問題