"Output" R Shiny 中的 observeEvent()
"Output" of observeEvent() in R Shiny
谁能给我一个建议,我该怎么办?我试图制作“根据用户选择更改变量数据类型”。看起来一切正常,但我不知道如何将修改后的数据集用于未来的工作。我把我的服务器代码粘贴到那里。
现在,当我更改变量类型时,我想使用修改后的 df1。我收到“消息(“正在运行”);”如果我使用 char 变量并将其更改为因子。例如,如果我选择 char 变量并尝试将其转换为数字,我会收到警告“观察中的警告:强制引入的 NA”,这意味着该代码有效(在我看来)。但是如果我想使用修改后的 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 = "")
})
## update when selection changes
# storing the selected variable from the variables list table
table.sel <- reactive({
df1()[,which(colnames(df1()) == col.name()[input$class_var,1])]
})
modified_df1 = eventReactive(input$chg_class,{
if( input$choose_class == "Numeric"){
df1 <- as.numeric(df1()[, input$class_var])
} else if(input$choose_class == "Factor"){ message("it's working");
df1 <- as.factor(df1()[, input$class_var])
} else if( input$choose_class == "Character"){
df1 <- as.character(df1()[, input$class_var])
} else if( input$choose_class == "Date"){
df1 <- as.Date(df1()[, input$class_var])
}
})
现在,当我更改变量类型时,我想使用修改后的 df1。我收到“消息(“正在运行”);”如果我使用 char 变量并将其更改为因子。例如,如果我选择 char 变量并尝试将其转换为数字,我会收到警告“观察中的警告:强制引入的 NA”,这意味着该代码有效(在我看来)。但是如果我想使用修改后的 df1(),我必须做什么。如何“保存”该更改?
你几乎已经答对了。如果您在 Shiny reference documentation 中查看 observeEvent()
的条目,您会发现同一页面上还有另一个函数:eventReactive()
。它们的工作方式几乎相同,但 eventReactive()
returns 是一个反应对象。因此,要让您的代码按照您希望的方式工作,您需要做的就是更改您的
observeEvent(input$chg_class, {
...
})
到
modified_df1 <- eventReactive(input$chg_class, {
...
})
谁能给我一个建议,我该怎么办?我试图制作“根据用户选择更改变量数据类型”。看起来一切正常,但我不知道如何将修改后的数据集用于未来的工作。我把我的服务器代码粘贴到那里。
现在,当我更改变量类型时,我想使用修改后的 df1。我收到“消息(“正在运行”);”如果我使用 char 变量并将其更改为因子。例如,如果我选择 char 变量并尝试将其转换为数字,我会收到警告“观察中的警告:强制引入的 NA”,这意味着该代码有效(在我看来)。但是如果我想使用修改后的 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 = "")
})
## update when selection changes
# storing the selected variable from the variables list table
table.sel <- reactive({
df1()[,which(colnames(df1()) == col.name()[input$class_var,1])]
})
modified_df1 = eventReactive(input$chg_class,{
if( input$choose_class == "Numeric"){
df1 <- as.numeric(df1()[, input$class_var])
} else if(input$choose_class == "Factor"){ message("it's working");
df1 <- as.factor(df1()[, input$class_var])
} else if( input$choose_class == "Character"){
df1 <- as.character(df1()[, input$class_var])
} else if( input$choose_class == "Date"){
df1 <- as.Date(df1()[, input$class_var])
}
})
现在,当我更改变量类型时,我想使用修改后的 df1。我收到“消息(“正在运行”);”如果我使用 char 变量并将其更改为因子。例如,如果我选择 char 变量并尝试将其转换为数字,我会收到警告“观察中的警告:强制引入的 NA”,这意味着该代码有效(在我看来)。但是如果我想使用修改后的 df1(),我必须做什么。如何“保存”该更改?
你几乎已经答对了。如果您在 Shiny reference documentation 中查看 observeEvent()
的条目,您会发现同一页面上还有另一个函数:eventReactive()
。它们的工作方式几乎相同,但 eventReactive()
returns 是一个反应对象。因此,要让您的代码按照您希望的方式工作,您需要做的就是更改您的
observeEvent(input$chg_class, {
...
})
到
modified_df1 <- eventReactive(input$chg_class, {
...
})