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)
}