我正在使用
as.ggplot
中的 ggplotify
来包装 circlize
包中的一些和弦图,这样我就可以使用 patchwork
很好地安排它们。然而,由于 as.ggplot
采用公式或表达式作为参数,因此似乎要求任何标识符在全局范围内可用。我可以通过使用 <<-
全局分配它们来解决这个问题,但这看起来很hacky。还有其他办法解决这个问题吗?
就我而言,我从函数内部调用
as.ggplot
(使用purrr::map
),因此其中的任何内容仅存在于本地范围内。
请参阅这些简单的示例。
第一个失败,因为隐式变量
.x
仅存在于匿名map
函数的范围内:
library(ggplotify)
library(purrr)
plots <- map(1:10,~{
as.ggplot(~plot(seq(.x)))
})
#> Error in `map()`:
#> ℹ In index: 1.
#> Caused by error in `seq()`:
#> ! object '.x' not found
plots[[10]]
#> Error in eval(expr, envir, enclos): object 'plots' not found
下一个成功了,因为我们将它分配给全局的东西:
library(ggplotify)
library(purrr)
plots <- map(1:10,~{
x <<- .x
as.ggplot(~plot(seq(x)))
})
plots[[10]]
有没有一种方法可以做到这一点,而不必使用
<<-
创建全局变量?
好吧,在发布这个问题之前我应该花一两分钟的时间进行谷歌搜索,因为答案就在这里:https://github.com/GuangchuangYu/ggplotify/issues/6#issuecomment-533442229
就上面的例子而言:
library(ggplotify)
library(purrr)
plots <- map(1:10,~{
as.ggplot(function() plot(seq(.x)))
})
plots[[10]]