R:引用带有特殊字符的变量名

Mat*_*.TW 2 r ggplot2

对于我正在编写的 Shiny 程序,我有包含破折号、逗号和括号的输入变量。我可以替换空格,但其余的都是需要的,因为它们指的是化合物,没有它们就没有意义。正如预期的那样,这些字符使 Shiny 应用程序无法找到所需的变量;而没有这些字符的变量则可以正常工作。

编辑:下面的代码是一个测试闪亮的应用程序。使用 Chemical-X(a,b),应用程序返回“无法找到函数 X”。对于 Chemical.B,应用程序返回“未找到对象 Chemical.B”,这是所需的结果,因为应用程序将化学品视为对象,而不是某些不存在的函数。

library (shiny)
library (ggplot2)

dat <- as.data.frame(c("Chemical-X(a,b)", "Chemical.B"))
dat[,2] <- (c(6,3)) 
colnames(dat) <- c("Chemical", "Count")

ui <- fluidPage(

 titlePanel("SE Test"),
  sidebarLayout(
   sidebarPanel(
    selectInput(inputId = "varX",
              label = "Chemical",
              choices = dat[,1],
              width = "200px"),
    selectInput(inputId = "varY1",
              label = "Count",
              choices = dat[,2],
              width = "200px")
  ),
mainPanel(
  plotOutput("chemPlot")
   )
  )
 )
server <- function(input, output){

 output$chemPlot <- renderPlot({
  plot.data <- ggplot(data = dat)
    point <- plot.data + geom_point(
    aes_string(x = input$varX, y = input$varY1))
  plot(point)
  })

}
Run Code Online (Sandbox Code Playgroud)

闪亮的应用程序(用户界面=用户界面,服务器=服务器)

是否有已知的方法可以做到这一点,或者我需要想出一些可行的解决办法?我已尝试按照此处的建议使用反引号,但这没有用。

谢谢,马特

Mat*_*.TW 5

我现在通过调用 Shiny input$ 变量 as.name 修复了这个问题。对于上面的例子,它看起来像这样。

 server <- function(input, output){

 output$chemPlot <- renderPlot({
  plot.data <- ggplot(data = dat)
    point <- plot.data + geom_point(
    aes_string(x = as.name(input$varX), y = as.name(input$varY1)))
  plot(point)
Run Code Online (Sandbox Code Playgroud)

现在看来这已经按预期发挥作用了。感谢 aocall 的努力。