R:引用带有特殊字符

时间:2017-11-02 13:43:18

标签: r ggplot2

对于我写作的Shiny程序,我输入的变量包含短划线,逗号和括号。空间我可以替代,但其余的都需要,因为它们是指化学化合物,没有它们就没有意义。正如所料,这些字符使Shiny app无法找到所需的变量;而没有这些字符的变量可以正常工作。

已编辑:以下代码是一款测试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)
  })

}

shinyApp(ui = ui,server = server)

有没有一种已知的方法可以做到这一点,还是我需要做一些可行的工作?我尝试使用反建议here,但这还没有奏效。

谢谢,马特

2 个答案:

答案 0 :(得分:1)

我发现反引号和aes_string通常适用于我。

library("ggplot2")
mtcars$"name with~special character" <- mtcars$cyl
ggplot(mtcars, aes_string(x="`name with~special character`", y="mpg")) + 
    geom_point()

我经常使用辅助函数paste_aes来执行此操作,例如:

paste_aes <- function(x) paste0("`", x, "`")

答案 1 :(得分:1)

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

 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)

这似乎按预期工作。谢谢你的努力。