【发布时间】:2022-01-28 22:29:30
【问题描述】:
我对反应式数据集有疑问。我使用 eventReactive() 来更改反应数据集 df1 中的列数据类型。它工作正常。列数据类型已更改的新数据集为 modified_df1。但是现在,当我想更改另一列中的数据类型时,之前的更改将被重置。这是因为在更改之前我仍然使用 df1 作为主要数据框。有没有办法在第二个数据类型更改之前重写 df1?
df1 <- reactive({
req(input$file1)
df <- read.csv(input$file1$datapath,
header = input$header,
sep = input$sep,
quote = input$quote)
df
})
colnames <- reactive({
names(df1()) })
observeEvent(df1(), {
updateCheckboxGroupInput(session, "class_var",
label = "Select Columns",
choices = colnames(),
selected = "")
})
modified_df1 <- eventReactive(input$chg_class, {
if (input$choose_class == "Numeric") {
var <- df1() %>% mutate(across(all_of(input$class_var), ~ as.numeric(.)))
} else if (input$choose_class == "Factor") {
var <- df1() %>% mutate(across(all_of(input$class_var), ~ as.factor(.)))
} else if (input$choose_class == "Character") {
var <- df1() %>% mutate(across(all_of(input$class_var), ~ as.character(.)))
} else if (input$choose_class == "Date") {
var <- df1() %>% mutate(across(all_of(input$class_var), ~ as.Date(.)))
}else if (input$choose_class == "Integer") {
var <- df1() %>% mutate(across(all_of(input$class_var), ~ as.integer(.)))
}
})
【问题讨论】:
-
与您的问题无关:您可以使用
myfun <- switch(input$choose_class, "Numeric" = as.numeric, "Factor" = as.factor, ...等重写您的代码,然后在across中使用myfun。关于您的问题,最好有一个最小的可重现示例。查看df1在工作应用程序中的创建位置和方式等。
标签: r shiny shiny-server shiny-reactivity