R Shiny: обновить Dataframe после смены ввода пользователем - PullRequest
0 голосов
/ 18 января 2019

Я слишком долго пытаюсь изменить существующий фрейм данных, имеющий структуру:

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.

Я полагаю, что я использую Наблюдение, Рендеринг значений или оба неправильных или textOutput просто плохая идея, чтобы использовать здесь. Но .. я не знаю ...

Мне на самом деле не нужно, чтобы это печаталось, но я подумал, что это может быть лучшим способом контролировать, правильно ли я делаю или нет.

1 Ответ

0 голосов
/ 18 января 2019

Это может сработать для вас. Это становится немного шатким со всеми различными версиями данных, которые загружаются и записываются.

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()
})


}
...