我有一个函数(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(), *)
,但是对每种语法都没有足够的知识来正确设置语法格式。
答案 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"))