R data.table разрывы в экспортируемых функциях
У меня проблема с получением data.table для работы в экспортируемых функциях roxygen2.
Вот простая, поддельная функция в файле с именем foo.R (находится в каталоге R моего пакета), который использует data.table:
#' Data.table test function
#' @export
foo <- function() {
m <- data.table(c1 = c(1,2,3))
print(is.data.table(m))
m[,sum(c1)]
}
Если я скопирую и вставлю эту функцию в R, эта функция будет работать нормально:
> foo <- function() {
+ m <- data.table(c1 = c(1,2,3))
+ print(is.data.table(m))
+ m[,sum(c1)]
+ }
> foo()
[1] TRUE
[1] 6
Но если я просто загружаю экспортированную функцию, R думает, что data.table является data.frame и ломается:
> rm(foo)
> load_all()
Loading test_package
> foo
function() {
m <- data.table(c1 = c(1,2,3))
print(is.data.table(m))
m[,sum(c1)]
}
<environment: namespace:test_package>
> foo()
[1] TRUE
Error in `[.data.frame`(x, i, j) : object 'c1' not found
Что происходит?
ОБНОВИТЬ
Спасибо @GSee за помощь. Похоже, это на самом деле проблема Devtools. Проверьте код интерактивной командной строки ниже.
После загрузки библиотеки test_package,foo
работает правильно:
> foo
function ()
{
m <- data.table(c1 = c(1, 2, 3))
print(is.data.table(m))
m[, sum(c1)]
}
<environment: namespace:test_package>
> foo()
[1] TRUE
[1] 6
Бегload_all()
ломает фу:
> load_all()
Loading test_package
> foo()
[1] TRUE
Error in `[.data.frame`(x, i, j) : object 'c1' not found
как-тоsource('R/foo.R')
восстанавливает функциональность foo:
> source('R/foo.R')
> foo
function() {
m <- data.table(c1 = c(1,2,3))
print(is.data.table(m))
m[,sum(c1)]
}
> foo()
[1] TRUE
[1] 6
И будущие звонкиload_all()
не ломайсяfoo
снова:
> load_all()
Loading test_package
> foo
function() {
m <- data.table(c1 = c(1,2,3))
print(is.data.table(m))
m[,sum(c1)]
}
> foo()
[1] TRUE
[1] 6
Кроме того, я обновил до devtools 1.5 и попытался добавить.datatable.aware=TRUE
, но это, похоже, ничего не делает.