在带有反应数据集的 Shiny 中使用带有 dplyr 的输入变量时出现问题
Trouble using inputted variable with dplyr in Shiny with a reactive dataset
我浏览了有关 plyr 和 dplyr 问题的其他答案,但没有成功。
我想在 dplyr "group_by_" 和 "summarise" 命令中使用两个输入变量。我似乎找不到正确的语法来将我的变量输入到 summarize 中以获得分组的平均值。将其转回数据框不起作用。
new_frame <- frame()
new_frame[[input$ycol]]
sapply 给出了一个结果,但它忽略了分组级别并给出了整列的平均值。
mean = sapply(frame()[input$ycol],mean)
我不确定要使用哪些其他选项。
MWE错误如下。
library(shiny)
ui <- fluidPage(
titlePanel("MWE using faithful data"),
sidebarLayout(
sidebarPanel(
selectInput('xcol', 'X Variable', "",choices = "colour"),
selectInput('ycol', 'Y Variable', "",choices = c("waiting", "eruptions"))),
mainPanel(
tableOutput("distPlot"))))
server <- function(input, output) {
frame <- reactive({
faithful <- faithful %>% mutate(colour = rep(c("red","white"),136))
return(faithful)
})
output$distPlot <- renderTable({
frame() %>% group_by_(input$xcol) %>%
summarise(mean = mean(input$ycol))
})
}
shinyApp(ui = ui, server = server)
如果我对行进行硬编码
summarise(mean = mean(input$ycol))
到
summarise(mean = mean(eruptions))
用summarise_也不行。
它给了我想要的东西,但这不是我实际代码中的一个选项。任何帮助将不胜感激。
谢谢
主要问题是我们如何评估 input$xcol
和 input$ycol
。这些是字符串元素。一种选择是使用 rlang::sym
将其转换为符号并使用 !!
进行评估
library(shiny)
library(dplyr)
ui <- fluidPage(
titlePanel("MWE using faithful data"),
sidebarLayout(
sidebarPanel(
selectInput('xcol', 'X Variable', "",choices = "colour"),
selectInput('ycol', 'Y Variable', "",choices = c("waiting", "eruptions"))),
mainPanel(
tableOutput("distPlot"))))
server <- function(input, output) {
frame <- reactive({
faithful %>%
mutate(colour = rep(c("red","white"),136))
})
output$distPlot <- renderTable({
frame() %>%
group_by(!! rlang::sym(input$xcol)) %>%
summarise(mean = mean(!! rlang::sym(input$ycol)))
})
}
shinyApp(ui = ui, server = server)
-输出
我浏览了有关 plyr 和 dplyr 问题的其他答案,但没有成功。
我想在 dplyr "group_by_" 和 "summarise" 命令中使用两个输入变量。我似乎找不到正确的语法来将我的变量输入到 summarize 中以获得分组的平均值。将其转回数据框不起作用。
new_frame <- frame()
new_frame[[input$ycol]]
sapply 给出了一个结果,但它忽略了分组级别并给出了整列的平均值。
mean = sapply(frame()[input$ycol],mean)
我不确定要使用哪些其他选项。
MWE错误如下。
library(shiny)
ui <- fluidPage(
titlePanel("MWE using faithful data"),
sidebarLayout(
sidebarPanel(
selectInput('xcol', 'X Variable', "",choices = "colour"),
selectInput('ycol', 'Y Variable', "",choices = c("waiting", "eruptions"))),
mainPanel(
tableOutput("distPlot"))))
server <- function(input, output) {
frame <- reactive({
faithful <- faithful %>% mutate(colour = rep(c("red","white"),136))
return(faithful)
})
output$distPlot <- renderTable({
frame() %>% group_by_(input$xcol) %>%
summarise(mean = mean(input$ycol))
})
}
shinyApp(ui = ui, server = server)
如果我对行进行硬编码
summarise(mean = mean(input$ycol))
到
summarise(mean = mean(eruptions))
用summarise_也不行。
它给了我想要的东西,但这不是我实际代码中的一个选项。任何帮助将不胜感激。
谢谢
主要问题是我们如何评估 input$xcol
和 input$ycol
。这些是字符串元素。一种选择是使用 rlang::sym
将其转换为符号并使用 !!
library(shiny)
library(dplyr)
ui <- fluidPage(
titlePanel("MWE using faithful data"),
sidebarLayout(
sidebarPanel(
selectInput('xcol', 'X Variable', "",choices = "colour"),
selectInput('ycol', 'Y Variable', "",choices = c("waiting", "eruptions"))),
mainPanel(
tableOutput("distPlot"))))
server <- function(input, output) {
frame <- reactive({
faithful %>%
mutate(colour = rep(c("red","white"),136))
})
output$distPlot <- renderTable({
frame() %>%
group_by(!! rlang::sym(input$xcol)) %>%
summarise(mean = mean(!! rlang::sym(input$ycol)))
})
}
shinyApp(ui = ui, server = server)
-输出