Ответ 1
Проблема, поскольку @GSee указала (по комментариям), кажется, эта проблема.
Чтобы узнать, является ли пакет информационным.значением, data.table
вызывает функцию cedta()
, которая:
> data.table:::cedta
function (n = 2L)
{
te = topenv(parent.frame(n))
if (!isNamespace(te))
return(TRUE)
nsname = getNamespaceName(te)
ans = nsname == "data.table" || "data.table" %chin% names(getNamespaceImports(te)) ||
"data.table" %chin% tryCatch(get(".Depends", paste("package",
nsname, sep = ":"), inherits = FALSE), error = function(e) NULL) ||
(nsname == "utils" && exists("debugger.look", parent.frame(n +
1L))) || nsname %chin% cedta.override || identical(TRUE,
tryCatch(get(".datatable.aware", asNamespace(nsname),
inherits = FALSE), error = function(e) NULL))
if (!ans && getOption("datatable.verbose"))
cat("cedta decided '", nsname, "' wasn't data.table aware\n",
sep = "")
ans
}
<bytecode: 0x7ff67b9ca190>
<environment: namespace:data.table>
Соответствующая проверка:
"data.table" %chin% get(".Depends", paste("package", nsname, sep=":"), inherits=FALSE)
Когда пакет зависит от data.table
, приведенная выше команда должна возвращать TRUE
- то есть, если вы установили пакет через R CMD INSTALL
, а затем загрузили пакет. Это связано с тем, что при загрузке пакета R по умолчанию создает переменную ".Depends" в пространстве имен. Если вы это сделали:
ls("package:test", all=TRUE)
# [1] ".Depends" "foo"
Однако, когда вы делаете devtools:::load_all()
, эта переменная, похоже, не установлена.
# new session + set path to package dir
devtools:::load_all()
ls("package:test", all=TRUE)
# [1] "foo"
Итак, cedta()
не знает, что этот пакет действительно зависит от data.table
. Однако, когда вы вручную устанавливаете .datatable.aware=TRUE
, строка:
identical(TRUE, get(".datatable.aware", asNamespace(nsname), inherits = FALSE))
выполняется, что вернет TRUE и, следовательно, преодолеет проблему. Но тот факт, что devtools
не помещает переменную .Depends
в пространство имен пакетов, все еще существует.
В общем, это действительно не проблема с data.table
.