Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 返回美学映射的函数_R_Function_Ggplot2 - Fatal编程技术网

R 返回美学映射的函数

R 返回美学映射的函数,r,function,ggplot2,R,Function,Ggplot2,我想创建一个函数,该函数“工作原理与”ggplot2的aes()函数类似。我的尝试失败,出现“未找到对象”错误: 库(ggplot2) 数据键入aes,不带任何括号或参数,以查看其作用: function (x, y, ...) { aes <- structure(as.list(match.call()[-1]), class = "uneval") rename_aes(aes) } 在上面的示例中应该可以使用,但请参见plyr::.(它使用与aes相同的matc

我想创建一个函数,该函数“工作原理与”
ggplot2
aes()
函数类似。我的尝试失败,出现“未找到对象”错误:

库(ggplot2)

数据键入
aes
,不带任何括号或参数,以查看其作用:

function (x, y, ...) 
{
    aes <- structure(as.list(match.call()[-1]), class = "uneval")
    rename_aes(aes)
}
在上面的示例中应该可以使用,但请参见
plyr::.
(它使用与
aes
相同的
match.call()[-1]
范式)中的注释:

类似的技巧也可以通过替换来执行,但当函数 可以用多种方式调用它变得越来越棘手 确保从正确的帧中提取值。 替补技巧也会让你很难对对手进行编程 使用它们的函数,而引用的类提供 as.quoted.character将字符串转换为适当的数据 结构

如果希望
my.aes
调用
aes
本身,可能类似于:

my.aes <- function(x,y) {
    do.call(aes, as.list(match.call()[-1]))
} 

但在这种情况下,您需要将您的呼叫更改为
my.aes(“a”、“b”)

不确定您的目的是什么,但您的目的是什么?@RomanLuštrik:谢谢,我不知道。想把这个转换成答案吗?谢谢你的解释。你的建议基本上意味着重新实现aes,我宁愿避免。是否有办法仅使用
aes
实现
my.aes
?(稍后,还会有一个
my.geom_text
,也许还有其他的…)如果不了解更多关于
my.aes
的行为与
aes
的不同之处,我很难给出更具体的答案——在您的示例中,它们也会做同样的事情。如果你愿意写my.aes(“a”,“b”)而不是my.aes(a,b),Roman的
aes\u string
建议会起作用,但我不会在我的答案中写这个,因为这是他的想法。请随意在你的答案中包含这一点,我不主张这个想法。就像外星人一样,它就在那里!:)有关将调用从
my.aes
传递到
aes
的版本,请参见我的编辑。不过,我不确定这将如何与您下一步的计划相适应。我认为您需要引用已通过的参数才能使其生效。
my.aes <- function(x, y) {
  ans <- list(x = substitute(x), y = substitute(y))
  class(ans) <- "uneval"
  ans
}
my.aes <- function(x,y) {
    do.call(aes, as.list(match.call()[-1]))
} 
my.aes <- function(x,y) {
    aes_string(x = x, y = y)
}