geom_mosaic() 中的 product() 不接受 R Shiny 上的反应性输入?
product() in geom_mosaic() not accepting reactive inputs on R Shiny?
我正在研究 R Shiny 上的 geom_mosaic()
函数(ggmosaic
包的一部分),并提出了一个我已经尝试解决几天的问题。
首先,一些示例数据:
a <- "a"
b <- "b"
c <- "c"
df <- tribble(
~id, ~var1, ~var2, ~var3,
1, a, b, c,
2, b, b, c,
3, b, b, c,
4, a, c, b,
5, a, a, a,
6, b, c, c,
7, b, c, a,
8, a, a, b,
9, a, a, a,
10, b, b, c
)
似乎 geom_mosaic()
不接受 Shiny 上的反应性输入,即代码 1(下方)在 R 控制台上工作正常,但代码 2(R Shiny 等价物)不工作,给出以下错误消息:
Error: object ______ not found
代码 1(geom_mosaic 在控制台上运行良好):
library(tidyverse)
library(ggmosaic)
selected_var1 <- "var1"
selected_var1_dat <- df[[selected_var1]]
selected_var2 <- "var2"
selected_var2_dat <- df[[selected_var2]]
ggplot(data = df) +
geom_mosaic(aes(x = product(selected_var1_dat),
fill = selected_var2_dat, na.rm = T))
输出ggplot(一切看起来都不错):
代码 2(现在,在 Shiny 中实现):
library(shiny)
library(tidyverse)
library(ggmosaic)
varOptions <- c("var1", "var2", "var3")
a <- "a"
b <- "b"
c <- "c"
df <- tribble(
~id, ~var1, ~var2, ~var3,
1, a, b, c,
2, b, b, c,
3, b, b, c,
4, a, c, b,
5, a, a, a,
6, b, c, c,
7, b, c, a,
8, a, a, b,
9, a, a, a,
10, b, b, c
)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput(inputId = "selected_var1",
label = "X:",
choices = varOptions),
selectInput(inputId = "selected_var2",
label = "Y:",
choices = varOptions)
),
mainPanel(
plotlyOutput(outputId = "mosaic")
)
)
)
server <- function(input, output) {
output$mosaic <- renderPlotly({
selected_var1 <- input$selected_var1
selected_var1_dat <- df[[selected_var1]]
selected_var2 <- input$selected_var2
selected_var2_dat <- df[[selected_var2]]
ggplot(data = df) +
geom_mosaic(aes(x = product(selected_var1_dat),
fill = selected_var2_dat, na.rm = T))
})
}
shinyApp(ui = ui, server = server)
输出此错误消息:
我尝试了不同的方法来解决这个问题,但没有成功。我已经与 Shiny 一起工作了很多,它似乎与我使用过的所有其他 ggplot
图表一起工作。有人对可能发生的事情有任何想法吗?
我还没有完全弄清楚这一点,但如果您满足以下条件,您的应用程序会运行良好:
- 运行代码前面ui/服务器部分
- 在控制台中输入
selected_var1_dat = df[["var1"]]
和selected_var1_dat = df[["var2"]]
- 运行 应用
所以问题似乎是在您的服务器代码中,selected_var1_dat <- df[[selected_var1]]
没有产生任何结果,这表明 selected_var1 <- input$selected_var1
没有产生任何结果。
ggmosaic
和 plotly
目前不兼容。您可以使用以下代码让您的应用程序在没有 plotly 的情况下运行。
library(shiny)
library(tidyverse)
library(ggmosaic)
#library(plotly)
a <- "a"
b <- "b"
c <- "c"
df <- tribble(
~id, ~var1, ~var2, ~var3,
1, a, b, c,
2, b, b, c,
3, b, b, c,
4, a, c, b,
5, a, a, a,
6, b, c, c,
7, b, c, a,
8, a, a, b,
9, a, a, a,
10, b, b, c
)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput(inputId = "selected_var1",
label = "X:",
choices = names(df)[-1]),
selectInput(inputId = "selected_var2",
label = "Y:",
choices = names(df)[-1])
),
mainPanel(
plotOutput(outputId = "mosaic")
)
)
)
server <- function(input, output) {
output$mosaic <- renderPlot({
ggplot(data = df) +
geom_mosaic(aes(x = product(!!sym(input$selected_var1)),
fill = !!sym(input$selected_var2)))
})
}
shinyApp(ui = ui, server = server)
我正在研究 R Shiny 上的 geom_mosaic()
函数(ggmosaic
包的一部分),并提出了一个我已经尝试解决几天的问题。
首先,一些示例数据:
a <- "a"
b <- "b"
c <- "c"
df <- tribble(
~id, ~var1, ~var2, ~var3,
1, a, b, c,
2, b, b, c,
3, b, b, c,
4, a, c, b,
5, a, a, a,
6, b, c, c,
7, b, c, a,
8, a, a, b,
9, a, a, a,
10, b, b, c
)
似乎 geom_mosaic()
不接受 Shiny 上的反应性输入,即代码 1(下方)在 R 控制台上工作正常,但代码 2(R Shiny 等价物)不工作,给出以下错误消息:
Error: object ______ not found
代码 1(geom_mosaic 在控制台上运行良好):
library(tidyverse)
library(ggmosaic)
selected_var1 <- "var1"
selected_var1_dat <- df[[selected_var1]]
selected_var2 <- "var2"
selected_var2_dat <- df[[selected_var2]]
ggplot(data = df) +
geom_mosaic(aes(x = product(selected_var1_dat),
fill = selected_var2_dat, na.rm = T))
输出ggplot(一切看起来都不错):
代码 2(现在,在 Shiny 中实现):
library(shiny)
library(tidyverse)
library(ggmosaic)
varOptions <- c("var1", "var2", "var3")
a <- "a"
b <- "b"
c <- "c"
df <- tribble(
~id, ~var1, ~var2, ~var3,
1, a, b, c,
2, b, b, c,
3, b, b, c,
4, a, c, b,
5, a, a, a,
6, b, c, c,
7, b, c, a,
8, a, a, b,
9, a, a, a,
10, b, b, c
)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput(inputId = "selected_var1",
label = "X:",
choices = varOptions),
selectInput(inputId = "selected_var2",
label = "Y:",
choices = varOptions)
),
mainPanel(
plotlyOutput(outputId = "mosaic")
)
)
)
server <- function(input, output) {
output$mosaic <- renderPlotly({
selected_var1 <- input$selected_var1
selected_var1_dat <- df[[selected_var1]]
selected_var2 <- input$selected_var2
selected_var2_dat <- df[[selected_var2]]
ggplot(data = df) +
geom_mosaic(aes(x = product(selected_var1_dat),
fill = selected_var2_dat, na.rm = T))
})
}
shinyApp(ui = ui, server = server)
输出此错误消息:
我尝试了不同的方法来解决这个问题,但没有成功。我已经与 Shiny 一起工作了很多,它似乎与我使用过的所有其他 ggplot
图表一起工作。有人对可能发生的事情有任何想法吗?
我还没有完全弄清楚这一点,但如果您满足以下条件,您的应用程序会运行良好:
- 运行代码前面ui/服务器部分
- 在控制台中输入
selected_var1_dat = df[["var1"]]
和selected_var1_dat = df[["var2"]]
- 运行 应用
所以问题似乎是在您的服务器代码中,selected_var1_dat <- df[[selected_var1]]
没有产生任何结果,这表明 selected_var1 <- input$selected_var1
没有产生任何结果。
ggmosaic
和 plotly
目前不兼容。您可以使用以下代码让您的应用程序在没有 plotly 的情况下运行。
library(shiny)
library(tidyverse)
library(ggmosaic)
#library(plotly)
a <- "a"
b <- "b"
c <- "c"
df <- tribble(
~id, ~var1, ~var2, ~var3,
1, a, b, c,
2, b, b, c,
3, b, b, c,
4, a, c, b,
5, a, a, a,
6, b, c, c,
7, b, c, a,
8, a, a, b,
9, a, a, a,
10, b, b, c
)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput(inputId = "selected_var1",
label = "X:",
choices = names(df)[-1]),
selectInput(inputId = "selected_var2",
label = "Y:",
choices = names(df)[-1])
),
mainPanel(
plotOutput(outputId = "mosaic")
)
)
)
server <- function(input, output) {
output$mosaic <- renderPlot({
ggplot(data = df) +
geom_mosaic(aes(x = product(!!sym(input$selected_var1)),
fill = !!sym(input$selected_var2)))
})
}
shinyApp(ui = ui, server = server)