r语言 - 根据反应变量是否存在,根据if/else呈现不同的绘图



我正在尝试创建一个应用程序,允许1)用户悬停在散点图点上,其中显示与该点相关的标签,以及2)通过标签搜索特定点。

目前,为了突出显示一个点,每次用户提交一个搜索词时,我都会重新绘制图形,并将该点添加到已绘制的其他点之上。

为了避免在用户输入标签之前服务器重新绘制,我要求"搜索"按下按钮。但是,在用户搜索任何标签之前,我正在努力使情节显示。

到目前为止我写的是:

library(shiny)
library(ggplot2)
library(ggiraph)
df <- data.frame(x = rnorm(100), y = rnorm(100), label = paste("gene", seq(100)))
head(df)
x           y  label
1 -0.3383215  0.91212341 gene 1
2 -0.5318215 -0.63273778 gene 2
3  1.1281345 -0.01296204 gene 3
4 -1.2964345 -2.21689946 gene 4
5  1.5877938 -0.24993362 gene 5
6  0.6385419  0.07849135 gene 6
gg_scatter <- ggplot(data = df, aes(x, y)) +
geom_point_interactive(aes(tooltip = label, data_id = label))

ui <- fluidPage(
textInput(inputId = "gene_symbol",
label = "Search for a gene",
placeholder = "gene 1"),
actionButton(inputId = "go",
label = "Search"),
girafeOutput("scatterplot"),
textOutput("message")
)
server <- function(input, output) {

gene_search <- eventReactive(input$go, {
input$gene_symbol
})
output$scatterplot <-
renderGirafe({
gg_scatter_highlight <- gg_scatter +
geom_point_interactive(data = subset(df, label == gene_search()),
tooltip = gene_search(),
size = 3,
color = "red")
girafe(code = print(gg_scatter_highlight),
options = list(opts_selection(type = "single")))
})
output$message <- renderText({
if(sum(is.element(df$label, req(gene_search()))) == 0) {
paste("Gene not found")
}
})
}
shinyApp(ui = ui, server = server)

我想添加这样的东西到output$scatterplot:

output$scatterplot <-
renderGirafe({
## If the user has not searched for anything, plot without any points highlighted
if(!isTruthy(gene_search)) {
girafe(code = print(gg_scatter),
options = list(opts_selection(type = "single")))
}
## Highlight the point that the user searched for
else {
gg_scatter_highlight <- gg_scatter +
geom_point_interactive(data = subset(df, label == gene_search()),
tooltip = gene_search(),
size = 3,
color = "red")
girafe(code = print(gg_scatter_highlight),
options = list(opts_selection(type = "single")))
}
})

…不幸的是,这仍然导致在搜索标签之前没有显示任何绘图。

任何帮助都将非常感激。

在开头设置eventReactive中的ignoreNULL = FALSE为默认值

library(shiny)
library(ggplot2)
library(ggiraph)
gg_scatter <- ggplot(data = df, aes(x, y)) +
geom_point_interactive(aes(tooltip = label, data_id = label))

ui <- fluidPage(

textInput(inputId = "gene_symbol",
label = "Search for a gene",
placeholder = "gene 1"),
actionButton(inputId = "go",
label = "Search"),
girafeOutput("scatterplot"),
textOutput("message")

)
server <- function(input, output) {

gene_search <- eventReactive(input$go, {
input$gene_symbol
}, ignoreNULL = FALSE)

output$scatterplot <-
renderGirafe({
gg_scatter_highlight <- gg_scatter +
geom_point_interactive(data = subset(df, label == gene_search()),
tooltip = gene_search(),
size = 3,
color = "red")

girafe(code = print(gg_scatter_highlight),
options = list(opts_selection(type = "single")))
})

output$message <- renderText({
if(sum(is.element(df$label, req(gene_search()))) == 0) {
paste("Gene not found")
}
})

}
shinyApp(ui = ui, server = server)

最新更新