[英]How to create column repeatedly in shiny reactive data?
我想在输入的csv
文件中创建列,但是由于reactive
的特性,我只能在输入文件中创建一个新列。
这是我的代码。
library(shiny)
library(rlang)
library(dplyr)
ui <- fluidPage(
fileInput("file","csv file", accept = c(".csv")),
textInput("name","Variable name"),
selectInput("sel","Variable selection", choices = colnames(file), multiple = T),
actionButton("go","Go"),
actionButton("mean","Mean"),
dataTableOutput("DF")
)
server <- function(input, output, session) {
appdata <- reactive({
read.csv(input$file$datapath, header=TRUE, stringsAsFactors = FALSE, sep = ",",
fileEncoding = "euc-kr")
})
observeEvent(input$file,{
output$DF <- renderDataTable({
appdata()
})
updateSelectInput(session, "sel", label = "Variable", choices = colnames(appdata()))
})
observeEvent(input$mean,{
rv <- reactiveValues(data=NULL)
rv$data <- appdata()
df <- eventReactive(input$mean,{
req(input$mean, input$sel, input$name)
var_name <- input$name
mydf <- rv$data
new_var <- mydf %>% transmute(!!var_name := rowMeans(select(., input$sel)))
rv$data <- cbind(mydf, new_var)
})
output$DF <- renderDataTable({
df()
})
})
}
shinyApp(ui, server)
如您所见, appdata
是reactive
,我将其放入闪亮的服务器中。 这就是为什么我不禁将rv$data <- appdata()
放入observeEvent()
。
有没有办法在反应数据中创建新列? 提前致谢。
尝试 :
library(shiny)
library(rlang)
library(dplyr)
ui <- fluidPage(
fileInput("file","csv file", accept = c(".csv")),
textInput("name","Variable name"),
selectInput("sel","Variable selection", choices = colnames(file), multiple = T),
actionButton("go","Go"),
actionButton("mean","Mean"),
dataTableOutput("DF")
)
server <- function(input, output, session) {
rv <- reactiveValues(data=NULL)
observeEvent(input$file,{
rv$data <- read.csv(input$file$datapath, header=TRUE, stringsAsFactors = FALSE, sep = ",",
fileEncoding = "euc-kr")
output$DF <- renderDataTable({
rv$data
})
updateSelectInput(session, "sel", label = "Variable", choices = colnames(rv$data))
})
observeEvent(input$mean,{
req(input$mean, input$sel, input$name)
var_name <- input$name
new_var <- rv$data %>% transmute(!!var_name := rowMeans(select(., input$sel)))
cat('Add ',var_name,'\n')
rv$data <- cbind(rv$data, new_var)
output$DF <- renderDataTable({
cat('update \n')
rv$data
})
})
}
shinyApp(ui, server)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.