【发布时间】:2021-11-30 00:24:21
【问题描述】:
我正在创建一个 R 闪亮的应用程序,它以 CSV 文件作为输入并具有三个选项:
-
“浏览”以加载 CSV 文件
-
“SplitColumn”会从合并列中删除空格,我的 CSV 有时可能会合并列。
-
'Replace' 和 'By' 用于替换特定的列值。
-
'Columns List' 上面所有三个函数都使用列列表中的列名来工作。
问题: 问题是我不断收到消息“‘闭包’类型的对象不是子集的。”我怎样才能摆脱这个错误,以便我可以使用上面列出的所有功能?
有人可以帮我解决这个问题吗?
CSV 示例
ID Type Category Range
21 A1B1 100
22 C1D1 200
23 E1F1 300
使用“Split column”和“Repalce”“BY”按钮后的预期结果
ID Type Category Range
21 A1 B1 5000
22 C1 D1 200
23 E1 F1 300
app.R
library(shiny)
library(reshape2)
library(DT)
library(tibble)
library(tidyverse)
###function for deleting the rows
splitColumn <- function(data, column_name) {
newColNames <- c("Unmerged_type1", "Unmerged_type2")
newCols <- colsplit(data[[column_name]], " ", newColNames)
after_merge <- cbind(data, newCols)
after_merge[[column_name]] <- NULL
after_merge
}
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("file1", "Choose CSV File", accept = ".csv"),
checkboxInput("header", "Header", TRUE),
actionButton("Splitcolumn", "SplitColumn", class = "btn-warning" ),
uiOutput("selectUI"),
selectInput("col", "Columns List:", NULL),
textInput("old", "Replace:"),
textInput("new", "By:"),
actionButton("replace", "Replace!"),
),
mainPanel(
DTOutput("table1")
)
)
)
server <- function(input, output, session) {
rv <- reactiveVal(NULL)
observeEvent(input$file1, {
file <- input$file1
ext <- tools::file_ext(file$datapath)
req(file)
validate(need(ext == "csv", "Please upload a csv file"))
rv$orig <- read.csv(file$datapath, header = input$header)
rv$data <- rv$orig
updateSelectInput(session, "splitcolumn", choices = names(rv$data()))
})
observeEvent(input$replace, {
req(input$splitcolumn)
dat <- req(rv$data())
traf <- if (is.numeric(dat[[input$Splitcolumn]])) as.numeric else identity
rv$data(dat %>%
mutate(!!rlang::sym(input$Splitcolumn) :=
replace(!!rlang::sym(input$Splitcolumn),
as.character(!!rlang::sym(input$Splitcolumn)) == input$old,
input$new) %>%
traf()))
})
output$table1 <- renderDT(
req(rv$data())
)
observeEvent(input$Splitcolumn, {
rv$data <- splitColumn(rv$data, input$selectcolumn)
})
}
shinyApp(ui, server)
【问题讨论】:
-
rv$data()有效吗?data在这种情况下应该是什么? -
@dario,
rv$data,正在引用 csv 输出 -
但是
rv$data和rv$data()完全不一样。第一个引用一个称为“数据”的元素,第二个引用一个函数。然后在其他地方,您尝试在函数调用中使用names方法 - 不确定 that 应该做什么 -
@dario,因为我是 R Shiny 的新手,你能帮我解决这个错误吗?
-
我不会教你闪亮的......我已经给出了一些提示和问题,你可以从检查它们开始。如果您是 R 新手,我强烈建议您在尝试构建闪亮的应用程序之前先学习基础知识