【发布时间】:2020-09-14 03:57:50
【问题描述】:
data.frame(a=1:20) %>%
dplyr::mutate(x = ifelse(a <= 10 & a > 0, 10, a)) %>%
dplyr::mutate(y = unlist(x) / sum(unlist(x)))
在上面的代码中,rcmdcheck::rcmdcheck() 抱怨a 和x 没有全局绑定。
以下是唯一的解决方案吗? 这样做是否值得:
data.frame(a=1:20) %>%
dplyr::mutate(x = {
a <- get("a", envir=environment())
ifelse(a <= 10 & a > 0, 10, a)}) %>%
dplyr::mutate(y = {
x <- get("x", envir=environment())
unlist(x) / sum(unlist(x))})
【问题讨论】:
-
在你的一个包
.R文件中的某处添加这个(不是在一个函数中):utils::globalVariables(c("a","x"))。 -
我认为现在推荐的方法是使用
.data$a而不是a,然后从.data导入代词dplyr -
这是好的做法吗?
a和x不是全局变量吗?该函数将对全局命名空间做什么? -
从它的帮助页面:“对于'globalVariables',提供的名称是函数或其他对象,当'check'工具应用于这个包时,它们应该被认为是全局定义的。 " 所以我相信它们并没有与实际的包一起添加到全局命名空间中,只是为了检查而假设在那里。