【问题标题】:R: Referring to a variable name with special charactersR:引用带有特殊字符的变量名
【发布时间】:2017-11-02 13:43:17
【问题描述】:

对于我正在编写的 Shiny 程序,我有包含破折号、逗号和方括号的输入变量。我可以替换掉空格,但其余的都是必需的,因为它们指的是化合物,没有它们就没有意义。正如预期的那样,这些字符使 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)
  })

}

shinyApp(ui = ui, server = server)

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

谢谢,马特

【问题讨论】:

  • 如果您可以提供一些示例输入并更清楚地解释所需的行为,这个问题会更容易回答。

标签: r ggplot2


【解决方案1】:

我发现反引号和aes_string 通常对我有用。

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

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

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

【讨论】:

  • 这似乎不起作用,我认为这是因为我不能将“”放在闪亮的 input$x 变量周围,因为当用户更改页面时该变量会改变
  • 我不确定我是否遵循;你能发布一个小代表吗?
【解决方案2】:

我现在通过调用 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)

这似乎现在按预期工作。感谢您的努力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-01
    • 2021-03-29
    • 2014-07-16
    • 2017-06-15
    • 2016-06-19
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多