R Shiny:交互式输入从 rds 文件进入 ggplot 时出错(评估中的错误:找不到对象'x')
Posted
技术标签:
【中文标题】R Shiny:交互式输入从 rds 文件进入 ggplot 时出错(评估中的错误:找不到对象\'x\')【英文标题】:R Shiny: error when interactive input goes into a ggplot from rds file (Error in eval: object 'x' not found)R Shiny:交互式输入从 rds 文件进入 ggplot 时出错(评估中的错误:找不到对象'x') 【发布时间】:2017-04-18 18:57:07 【问题描述】:我想使用 R 的 shiny
包生成一个应用程序。我想从另一个项目上传 ggplots 并添加一些交互式内容。
当我使用 geom_point()
将数据点添加到在同一 R 代码中创建的 ggplot 中时,这可以正常工作。但是,当我再次保存并重新读取 ggplot (*) 时,会发生错误。我仍然可以添加geom_point
(**),但它不接受来自input$slider
的交互内容。
ui.R
library(shiny)
shinyUI(
fluidPage(
# Title
titlePanel(""),
# sidebar
sidebarLayout(
sidebarPanel("",
sliderInput("slider", "slider",
min = 100, max = 500, value = 300, step = 10)
),
# Main
mainPanel("",
plotOutput("ggplt")
)
)
)
)
server.R
library(shiny)
shinyServer(
function(input, output)
# produce a plot
output$ggplt <- renderPlot(
# ggplot scatterplot
library(ggplot2)
gg <- ggplot(data = mtcars, aes(x = disp, y = mpg)) +
geom_point()
# (*) save ggplot
#saveRDS(gg, "plt.rds")
#rm(gg)
#gg <- readRDS("plt.rds")
# x-coordinate for geom_point
xc <- as.numeric(input$slider)
gg + geom_point(aes(x = xc, y = 20), size = 5, colour = "red")
## (**) alternative
#gg + geom_point(aes(x = 400, y = 20), size = 5, colour = "red")
)
)
【问题讨论】:
见tagteam.harvard.edu/hub_feeds/1981/feed_items/2104863 【参考方案1】:我真的不知道这里发生了什么,我认为这可能是 ggplot2 环境处理和闪亮的反应性环境处理之间的一些微妙的交互。可能值得将其标记为错误。
但是,有很多方法可以通过小改动使其正常工作。我认为最好的方法是对滑块值使用反应函数,尽管仅将 xc
与皱眉的 <<-
一起分配似乎也有效,而且变化较小。
您也可以直接在aes(..)
函数中使用input$slider
,因为这似乎也可以,但是使用响应式函数感觉更干净。
所以这是我建议的解决方法:
library(shiny)
library(ggplot2)
u <- shinyUI(
fluidPage(
titlePanel(""),
sidebarLayout(
sidebarPanel("", sliderInput("slider", "slider",
min = 100, max = 500, value = 300, step = 10)
),
mainPanel("", plotOutput("ggplt")
)
)))
s <- shinyServer( function(input, output)
sliderval <- reactive(input$slider)
output$ggplt <- renderPlot(
req(input$slider)
gg <- ggplot(data = mtcars) +
geom_point(aes(x = disp, y = mpg))
# (*) save ggplot
saveRDS(gg, "plt.rds")
rm(gg)
gg <- readRDS("plt.rds")
gg + geom_point(aes(x = sliderval(), y = 20), size = 5, colour = "red")
)
)
shinyApp(u,s)
屈服:
【讨论】:
以上是关于R Shiny:交互式输入从 rds 文件进入 ggplot 时出错(评估中的错误:找不到对象'x')的主要内容,如果未能解决你的问题,请参考以下文章