r - 为什么这段代码在 R 控制台中工作,而不是作为 R 包的一部分?

标签 r debugging

这段代码工作正常:

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/

相关文章:

R Shiny 将 SelectizeInput 默认值设置为 NULL

r - 在 R 中用点作为千位分隔符加载 csv 的最优雅的方法

r - 添加超链接到 Shiny 图

debugging - 调试 T4Scaffolding.Core Nuget 包时的 Set-DefaultScaffolder : Cannot get an instance of EnvDTE. DTE - 高级 Powershell 调试

wpf - "Must disconnect specified child from current parent Visual before attaching to new parent Visual"异常如何调试可视化树

c# - C#/VS2013-为什么这些代码在没有调试的情况下会失败?

macos - OSX Catalina 上的 gdb 8.3.1 "not in executable format: file format not recognized"

javascript - 如何找到导致 :hover action on DOM element? 的代码

r - 不能与 cowplot 包左对齐

r - R 中非线性关系的外推 (ggplot2)