R 公式/表达式中标识符的范围

问题描述 投票:0回答:1

我正在使用

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]]

有没有一种方法可以做到这一点,而不必使用

<<-
创建全局变量?

r ggplot2 scope expression purrr
1个回答
0
投票

好吧,在发布这个问题之前我应该花一两分钟的时间进行谷歌搜索,因为答案就在这里: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]]

© www.soinside.com 2019 - 2024. All rights reserved.