在下面的闪亮应用中,我想使用dt
中来自reactive
被叫数据的数据框renderPlot
。
我通过以下方式尝试了此操作:ggplot(dt, aes(x, y)) + geom_point()
和ggplot(data(), aes(x, y)) + geom_point()
我无法弄清楚如何将数据帧从一个反应部分转移到另一个反应部分。
修改
我想我通过使用ggplot(data()$dt, aes(x,y) + ...
找到了解决方案但现在问题似乎出现在filter
包的dplyr
中。
任何提示?
服务器:
# server
library(dplyr)
library(shiny)
library(ggplot2)
df <- data.frame(x = rnorm(100), y = rnorm(100)) %>%
mutate(id = ntile(x, 4))
shinyServer(function(input, output) {
data <- reactive({
dt <- dt %>%
filter(id == input$id)
})
output$plot <- renderPlot({
ggplot(dt, aes(x,y) +
geom_point()
})
})
UI:
## ui
library(shiny)
library(ggplot2)
shinyUI(fluidPage(
sidebarPanel(width = 2,
selectInput("id",
"Select ID:",
c(1:4))
),
mainPanel(width = 10,
plotOutput("plot")
)
))
答案 0 :(得分:4)
您的代码中有一些错误(您提供的内容甚至无法运行),但最重要的是,您必须了解响应的工作原理。我建议再次阅读闪亮的教程,特别是有关反应变量的部分。渲染绘图时,您希望使用data
的值,而不是dt
的值。
其他错误:
df
,但在后续代码中,您使用的是不存在的变量dt
这是您的代码的工作版本:
df <- data.frame(x = rnorm(100), y = rnorm(100)) %>%
mutate(id = ntile(x, 4))
runApp(shinyApp(
ui = fluidPage(
sidebarPanel(width = 2,
selectInput("id",
"Select ID:",
c(1:4))
),
mainPanel(width = 10,
plotOutput("plot")
)
),
server = function(input, output, session) {
data <- reactive({
df <- df %>%
filter(id == input$id)
df
})
output$plot <- renderPlot({
ggplot(data(), aes(x,y)) +
geom_point()
})
}
))