r - 如何在闪亮的反应数据中重复创建列?
问题描述
我想在输入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)
推荐阅读
- cordova - 构建我的项目 ionic 4 corvova android 时 gradle 出错,有人帮我吗?
- docker - Docker:在容器中运行我的应用程序时无法访问我的本地 MongoDB 容器
- oracle - 插入到报告中的图像具有灰色背景
- c - 交换链表中的某些元素
- javascript - 从 html 表中追加数据而不是另存为新文件
- python - 如何修复 tkinter 中的“'int' object is not iterable”错误
- ios - CLI 命令未上传 dSYM
- php - 如何用 php 打印这些 json 值
- javascript - Jest 中的 resetAllMocks、resetModules、resetModuleRegistry、restoreAllMocks 之间的区别
- python - 我正在尝试获取我打印的内容并将其添加到列表中以作为员工工资单打印出来