R Shiny:在用户更改输入后更新数据框

时间:2019-01-18 16:47:37

标签: r shiny reactive

我现在尝试太长时间了,以更改具有以下结构的现有数据框:

A<-c(1,NA)
B<-c(2,NA)

df<-data.frame(A,B)

>df
          A     B
1         1     2 
2         NA    NA

我想在用户界面中显示数据框,并更改一个csv文件,用该数据框的数据覆盖它。

我想实现的路径:

  • 数据帧最初已加载到R中。
  • 用户在应用程序的滑块上选择一个值。然后,应将此值写入A2以覆盖NA。之后,应将整个内容写入CSV文件。

到目前为止,该问题的孤立部分:

library("shiny")
x<- .. #(csvupload)

ui <- fluidPage(

#Copy of x
xchange<-x 

#The slider where the user chooses a value
sliderInput("slider", label = "Slider", min = 0, 
           max = 3,step=0.001, value =1),            

#Print of the changed database
textOutput("xchange"))    


server<-function(input,output,session){

observeEvent(input$Slider,{
    x$A[x$Szenarios=="2"]<-input$slider
 }) 

output$xchange<-renderValues({
    input$x})
}

我得到了错误:

Error code:argument should be a character vector of length 1
all but the first element will be ignored
Warning: Error in reactiveValues: All arguments passed to reactiveValues() must be named.

我想我使用的是watchEvent,renderValues或两者都错误或textOutput在这里使用是一个坏主意。但是..我不知道...

我并不是真的需要打印它,但是我认为这可能是控制我做的是否正确的最佳方法。

1 个答案:

答案 0 :(得分:0)

这可能对您有用。对于要上传和写入的所有不同版本的数据,它都会有些奇怪。

library("shiny")

ui <- fluidPage(

#The slider where the user chooses a value
sliderInput("slider", label = "Slider", min = 0, 
           max = 3,step=0.001, value =1),            

#Print of the changed database
textOutput("xchange")

)    


server<-function(input,output,session){

#Read data into server not ui
data<-read.csv("x")

#Re-read data for any changes, write to csv new changes, ignore startup
observeEvent(input$slider,{
data<-read.csv("x")
data$A[2]<-input$slider
write.csv(data,"data.csv")
ignoreInit=T
})

#Reactive variable xchange that updates the values of data
xchange<-reactive({
data<-read.csv("x")
data$A[2]<-input$slider
data
})

#Display the most recent file, with the most recent changes
output$xchange<-renderTable({
xchange()
})


}