编辑:哈德利威克姆指出我错过了.R CMD检查是投掷NOTES,而不是警告.我非常抱歉这种混乱.这是我的疏忽.
R CMD check每次我在ggplot2中使用合理的绘图创建语法时都会抛出此注释:
no visible binding for global variable [variable name]
Run Code Online (Sandbox Code Playgroud)
我理解为什么R CMD检查会这样做,但它似乎将整个其他合理的语法定为犯罪.我不知道采取什么措施来让我的包裹通过R CMD check并获准进入CRAN.
Sascha Epskamp之前基本上发布了相同的问题.我认为,不同之处在于它的手册subset()页说它是专为交互式使用而设计的.
就我而言,问题还没有结束,subset()而是超出了一个核心特征ggplot2:data =争论.
JitteredResponsesByContrast <- function (data) {
return(
geom_point(
aes(
x = x.values,
y = y.values
),
data = data,
position = position_jitter(height = 0, width = GetDegreeOfJitter(jj))
)
)
}
Run Code Online (Sandbox Code Playgroud)
R CMD …
我正在尝试使用Jdata.table 创建一个带有函数的R包.当我运行时R CMD check,我有一个注意:'J'没有可见的全局函数定义,尽管我已经在DESCRIPTION文件中添加了data.table作为依赖项.
包:rfPred
类型:包
标题:将rfPred功能预测分数分配给错误变体列表
版本:1 . 0日期
:2013-03-14
作者:me
维护者:我
取决于:data.table
[..]
我试图在我想要创建的包中使用data.table包的另一个函数,但是我和J.没有相同的问题.
你有解决方案吗 ?
data.table是一个很棒的包,唉,产生无根据的警告checkUsage(代码来自这里和这里):
> library(compiler)
> compiler::enableJIT(3)
> dt <- data.table(a = c(rep(3, 5), rep(4, 5)), b=1:10, c=11:20, d=21:30, key="a")
> my.func <- function (dt) {
dt.out <- dt[, lapply(.SD, sum), by = a]
dt.out[, count := dt[, .N, by=a]$N]
dt.out
}
> checkUsage(my.func)
<anonymous>: no visible binding for global variable ‘.SD’ (:2)
<anonymous>: no visible binding for global variable ‘a’ (:2)
<anonymous>: no visible binding for global variable ‘count’ (:3)
<anonymous>: no visible binding …Run Code Online (Sandbox Code Playgroud) 我正在使用gWidgets在R中制作GUI.到目前为止,我一直在通过全球环境将值从一个窗口传递到另一个窗口.使用全局环境很容易实现,但并不理想.一个问题是R CMD check抱怨缺乏对全局变量的可见绑定.
作为这个问题的解决方案,几个R程序员已经提到了引用类.但是要理解引用类在这种情况下如何工作,有一个简单的例子真的很有帮助.
让我给一个愚蠢的GUI工作.当用户点击第一个窗口的按钮时,它将模型m放在全局环境中.第二个按钮m来自全局环境并提供输出.当您再次点击第一个按钮时,它将创建一个新模型m并更改第二个按钮的输出.如果关闭第一个窗口,第二个窗口中的按钮仍然可以工作,因为m它位于全局环境中.
library(gWidgets)
options(guiToolkit = "tcltk")
h1 <- function(h, ...){
d1 <- data.frame(x=runif(10), y=runif(10))
.GlobalEnv$m <- lm(x ~ y, data=d1)
}
g1 <- gbutton("1. Make model",
container=gwindow(), handler=h1)
h2 <- function(h, ...){
d2 <- data.frame(y=(1:10)/10)
p <- predict(.GlobalEnv$m, newdata=d2)
print(p)
}
g2 <- gbutton("2. Make prediction",
container=gwindow(), handler=h2)
Run Code Online (Sandbox Code Playgroud)
如何在此示例中使用引用类?
我有一个类似的问题,就像这里已经讨论过的一样: Novisible绑定for全局变量Note in R CMD check
就我而言,我在自己的包中使用 ddply 函数,当我检查 R 包时,我得到一条注释:“全局变量‘VARX’没有可见的绑定。
所寻址的代码行是:
subsample <- ddply(my_data, .(VARX), function(x){x[sample(nrow(x), 1), ]})
Run Code Online (Sandbox Code Playgroud)
变量 VARX 是包 (sysdata) 提供的数据帧中的一列。改进代码以获得适当的 R 包的良好做法是什么?