Функция data.table работает в script, но не в пакете

У меня есть функция удаления пустых столбцов из таблицы data.table и включается это в пакет.

Как-то это работает, когда я загружаю функцию, но не тогда, когда я вызываю ее из пакета. Вопрос: почему эта функция не запускается, когда я вызываю ее из пакета?

В любой из функций пакета нет необходимости (data.table) или библиотеки (data.table). Файл ОПИСАНИЯ содержит: Импорт: data.table. Таким образом Использование пакета data.table внутри моего собственного пакета выполняется.

library(data.table)
df = data.table(a = c(1,2,3), b = c(NA, NA, NA), c = c(4,5,6))
library(cr360)

remove.emptycols(df) # from package
Error in .subset(x, j) : invalid subscript type 'list'

# now open function from mypackage and run again:
# source("./mypackage/R/fun_remove_emptycols.R")
remove.emptycols(df)
   a c
1: 1 4
2: 2 5
3: 3 6

функция:

#' Remove empty columns
#' 
#' Counts the number of NA values in the columns and counts the number of rows.
#' @param df
#' @return df data.table with empty columns removed.
#' @export
#' 
#' 
remove.emptycols = function(df) {

count.colNA = df[,lapply(.SD, function(x) sum(is.na(x)))] 
df = df[,which(count.colNA != nrow(df)),with = FALSE]  

return(df)
}

Ответ 1

Текст

import(data.table)

должен находиться в файле NAMESPACE , а data.table находится в поле Imports: в поле ОПИСАНИЕ. Я отредактировал связанный вопрос и обновил FAQ 6.9.
Использование пакета data.table внутри моего собственного пакета

Кроме того, в RStudio обратите внимание на параметр "Использовать Roxygen для создания файла NAMESPACE" и см.:
Создает ли roxygen2 автоматически директивы NAMESPACE для" Импорт: " пакеты?


Предыдущая красная селедка для потомков...

Не уверен, но ваш пакет ОПИСАНИЕ содержал:

...
Version: 1.0
Date: 2014-06-23
Imports:
    data.table
Author: Henk
Description: utility functions
...

Попробуйте удалить разрыв строки, и вместо этого:

...
Version: 1.0
Date: 2014-06-23
Imports: data.table
Author: Henk
Description: utility functions
...