【发布时间】:2020-09-06 16:43:31
【问题描述】:
我想在输入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() 中。
有没有办法在反应数据中创建新列? 提前致谢。
【问题讨论】: