eval(expr,envir,enclos)出错:找不到对象'input'

时间:2015-09-16 13:40:59

标签: r ggplot2 shiny rstudio reactive-programming

我试图允许用户选择他们想要绘制的数据列(selecty)。除了这部分,我的应用程序中的其他所有内容都有效。以下是我的代码的相关部分:

#ui.R

library(shiny)
library(ggplot2)
shinyUI(fluidPage(h1("Title 1"),
              # Sidebar
              sidebarLayout(
                sidebarPanel(
                  h3("Title 2"),
                  selectInput("pnum",
                              label = "Select the patient number",
                              choices = unique(pnums), selected = pnums[1]),
                  selectInput("selecty",
                              label = "Choose a variable to display on the     y-axis",
                              choices = list('Var1', 'Var2', 'Var3', 'Var4')),
                  dateRangeInput("dates", label= "Date Range"),
                  submitButton("Create Graph")
                ),
                # Show a plot
                mainPanel(
                  plotOutput('makeplot')
              )
)
))

#server.R
#relevant portion only - ggplot

library(shiny)
require(RODBC)
library(ggplot2)
library(quantmod)
library(reshape)

shinyServer(function(input, output) {

output$makeplot <- renderPlot({

p <- ggplot(pdata(), aes(x = Time_Stamp, y = input$yselect)) + geom_point()

print(p)
})
})

数据来自在线数据库,是一种反应性功能。我的主要问题是,在用户选择列时,它必须是单引号,虽然我想将它转移到没有引号的ggplot函数,因此它充当列名。我也尝试在'y ='中创建一个switch语句但是我得到了同样的错误。

1 个答案:

答案 0 :(得分:1)

首先,在您的ggplot调用中,您应该y = input$selectyui.R中的命名保持一致。

然后,如果我理解正确,您应该查看aes_string中的ggplot函数,因为aes使用非标准评估,它允许您直接指定变量名称而不是作为人物。在这里,input$yselect作为字符传递,因此您需要替换server.R

p <- ggplot(pdata(), aes(x = Time_Stamp, y = input$yselect)) + geom_point()

p <- ggplot(pdata(), aes_string(x = "Time_Stamp", y = input$selecty)) + geom_point()