R 如何在两个不同的数据框中使用相同的名称,让闪亮的应用程序正常工作?
我正在写我的第一个闪亮的应用程序。代码的要点是读取csv文件,用户回答来自应用程序的一些输入,并将这些数据附加到csv文件中。其目的是每天保存此文件,应用程序更新内容。该文件随后将用于分析 我的应用程序在第一次打开时成功执行此操作。但是,当会话关闭然后重新打开以供以后使用时(设想在午餐前关闭应用程序,然后在午餐后重新打开),由于“错误:名称与以前的名称不匹配”,CSV文件将无法再追加 我首先有一个“empty”.csv,只有一个标题行,有三列(a、B、C),称为log.csv 然后我使用下面的代码来创建这个闪亮的应用程序R 如何在两个不同的数据框中使用相同的名称,让闪亮的应用程序正常工作?,r,csv,append,shiny,R,Csv,Append,Shiny,我正在写我的第一个闪亮的应用程序。代码的要点是读取csv文件,用户回答来自应用程序的一些输入,并将这些数据附加到csv文件中。其目的是每天保存此文件,应用程序更新内容。该文件随后将用于分析 我的应用程序在第一次打开时成功执行此操作。但是,当会话关闭然后重新打开以供以后使用时(设想在午餐前关闭应用程序,然后在午餐后重新打开),由于“错误:名称与以前的名称不匹配”,CSV文件将无法再追加 我首先有一个“empty”.csv,只有一个标题行,有三列(a、B、C),称为log.csv 然后我使用下面的代
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)'
库(闪亮)
ui如果应用程序中不需要输出,您可以尝试使用observeEvent
。(我对代码做了一些修改,使之更简单,但想法是一样的)
库(闪亮)
path对于任何其他可能遵循的人,我将发布最终解决方案。没有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)
库(闪亮)
感谢您的快速回复。这几乎奏效了。我会再弄点来看看能不能修好。好消息:当它再次打开时不会崩溃。坏消息:打开额外次数后,在追加时,它会一次又一次地追加以前的所有数据。例如,如果在第一个实例中有3个观察结果,并且应用程序已关闭。在应用程序的下一个实例中,新使用1次应用程序后,现在有7次观察(前3次、前3次重复和新观察)。我会坚持下去,但如果你有解决办法,我就接受。再次感谢。是的!!!!!谢谢你,D!这起作用了。然后为了进一步回答我上面的问题,rbind(log,t)是愚蠢的。使用append写入.csv已经绑定了它。再次感谢!很高兴听到这个!如果答案有帮助,您可以通过单击旁边的复选标记来接受它。
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)
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)