这段代码工作正常:
data.table::data.table(A = c(2, 1))[order(A), ]
它打印: A
1: 1
2: 2
我也可以将此代码包装在一个函数中就好了(相同的输出):bug <- function() {
data.table::data.table(A = c(2, 1))[order(A), ]
}
bug()
但是,将此函数放入包并调用 Bug::bug()
由于某种原因不起作用,给了我Error in order(A) : object 'A' not found
Calls: <Anonymous> -> [ -> [.data.table -> [.data.frame -> order
Execution halted
以下是重现此问题的方法:文件
DESCRIPTION
:Package: Bug
Title: Bug
Version: 0.0.0.0001
Description: Bug
License: GPLv3
Imports: data.table
Encoding: UTF-8
RoxygenNote: 7.1.1
文件 R/Bug.R
:#' @export
bug <- function() {
data.table::data.table(A = c(2, 1))[order(A), ]
}
然后cd
进入DESCRIPTION
所在的目录是和问题R -e "devtools::document(); devtools::install(); Bug::bug()"
最佳答案
data.table
package 做了一些奇怪的非标准评估。它试图弄清楚您的软件包是否想要支持,在您的情况下,决定“不”。
我认为这是记录在案的行为,但我称之为设计缺陷,如果不是错误的话。
您可以通过放置来强制它支持 NSE
.datatable.aware <- TRUE
在你的包源代码中的某个地方。
关于r - 为什么这段代码在 R 控制台中工作,而不是作为 R 包的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68391926/