gpt4 book ai didi

r - ggplot2 + aes_string 通过公式接口(interface)在函数内

转载 作者:行者123 更新时间:2023-12-04 06:21:29 24 4
gpt4 key购买 nike

以交互方式,此示例运行良好:

p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p + facet_grid(. ~ vs)

现在,用公式接口(interface)创建一个函数并使用 aes_string做同样的事情,但它不起作用(错误是: Error in layout_base(data, cols, drop = drop) : At least one layer must contain all variables used for facetting):
tf <- function(formula, data) {
res <- as.character(formula[[2]])
fac2 <- as.character(formula[[3]][3])
fac1 <- as.character(formula[[3]][2])

# p <- ggplot(aes_string(x = fac1, y = res), data = data)
# p <- p + geom_point() # original attempt
p <- ggplot() # This is Joran's trick, but it doesn't work here
p <- p + geom_point(aes_string(x = fac1, y = res), data = data)
p <- p + facet_grid(.~fac2) # comment this out, and it works but
# of course is not faceted
}

p <- tf(formula = wt ~ am*vs, data = mtcars)

通过 Joran 的诡计,我指的是 here ,这是我最近发布的一个类似问题。在这种情况下 ggplot2没有看到我的分面请求。制作 facet_grid(".~fac2")没有效果。建议?我一直被这些事情弄得不知所措。谢谢!

最佳答案

您可以使用 as.formulapaste :

p <- p + facet_grid(as.formula(paste(". ~", fac2)))

在您的示例中,这给出了:

enter image description here

关于r - ggplot2 + aes_string 通过公式接口(interface)在函数内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14742287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com