如何正确评估R波浪号表达式中的变量

时间:2019-05-14 19:47:29

标签: r syntax

我有一个函数(col_grob),它使用波浪号表示法调用另一个函数(pal_bar),如下所示:

## plots a colour bar with specified colour intervals
pal_bar <- function(cols) {
  cols <- colorRampPalette(cols)(200)
  par(mar = c(0, 0, 0, 0))
  plot(1:200, rep(1, 200), col = cols, pch = 15, cex = 1.1, bty = 'n', xaxt = 'n', xlab = '', yaxt = 'n', ylab = '', main="")
}

## calls pal_bar function to plot the bar as a grob, tilde expression
col_grob <- function(pal) {
  g <- ggplotify::as.grob(~pal_bar(pal))
  grid::grid.draw(g)
}

我在运行时返回错误“找不到对象'pal'”:

col_grob(pal = c("red", "blue"))

我遇到了resources和类似的questions,但由于对评估规则缺乏理解,因此无法解决该问题。我尝试了~pal_bar(I(pal))bquote()函数,可能还尝试了structure(list(), *),但是对每种语法都没有足够的知识来正确设置语法格式。

我将如何col_grob(pal = c("red", "blue"))为我绘制所需的颜色条? enter image description here

1 个答案:

答案 0 :(得分:2)

可能的解决方案:

col_grob <- function(pal) {
  txt <- substitute(pal_bar(pal))
  g <- ggplotify::as.grob(as.expression(txt))
  grid::grid.draw(g)
}

col_grob(pal = c("red", "blue"))