対話的に、この例は正常に動作します:
p <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
p + facet_grid(. ~ vs)
ここで、数式インターフェイスを使用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")
も何の効果もありませんでした。提案?私は常にこれらのことに頭を悩ませています。ありがとう!