我正在try 将一个函数实参(或参数)传递给gggraph--下面是一个要显示/测试的虚拟数据集

test <- data.frame(id=c(1,2,3,4,5), 
                   base=c(230,365,390,201,298), 
                   heig=c(200,310,90,100, 91), 
                   widt=c(21,75,22,46,51))

fun1 <- function(va1,va2){
  ggplot(data=test,mapping=aes(va1, va2)) + geom_point()
}

fun1(base,heig)

我收到一个错误:

Error in `geom_point()`:
! Problem while computing aesthetics.
ℹ Error occurred in the 1st layer.
Caused by error in `FUN()`:
! object 'base' not found
Run `rlang::last_trace()` to see where the error occurred.

为了调用函数param,我try 了ggploy中的{{}}[[]]和其他组合,但都无济于事.

推荐答案

您可以按如下方式使用enquation:

library(ggplot2)
library(rlang)

fun1 <- function(va1,va2) {
  va1 <- enquo(va1)
  va2 <- enquo(va2)

  ggplot2::ggplot(data=test,mapping=aes(!!va1, !!va2)) + 
    geom_point()
}

From the help page of the "Tidy eval helpers":

(您可以通过以下命令找到它:?等同):

Enquo()和enquos()会延迟一个或多个函数参数的执行.前者返回单个表达式,后者返回一个表达式列表.一旦解除,表达式将不再自行求值.必须使用⁠!!⁠(对于单个表达式)和⁠!!!⁠(对于表达式列表)将它们注入到求值上下文中.

R相关问答推荐

将一个载体的值相加,直到达到另一个载体的值

卸载安装了BRM的模型发出的警告

如何使用stat_extract_all正确提取我的目标值?

R等效于LABpascal(n,1)不同的列符号

使用case_match()和char数组重新编码值

自动变更列表

将数据集中的值增加到当前包含的最大值

如何通过匹配R中所有可能的组合来从宽到长旋转多个列?

将选定的索引范围与阈值进行比较

将标识符赋给事件序列,避免错误观察

如何使这些react 表对象相互独立?

将多个变量组合成宽格式

如何将这个小列表转换为数据帧?

将摘要图添加到facet_WRAP gglot的末尾

无法将条件case_when()应用于使用!!创建的新变量Mutations

在GT()中的列之间添加空格

如何在R中使用因子行求和?

R/shiny APP:如何充分利用窗口?

如何从矩阵绘制环弦图

如何使用包含要子集的值的列表或数据框来子集多个列?