Функция 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
...