Использовать данные.таблица пакет внутри моего собственного пакета


Я пытаюсь использовать эти данные.таблица пакет внутри моего собственного пакета. МВт выглядит следующим образом:

Я создаю функцию, тест.весело, что просто создает небольшие данные.объект таблицы, а затем суммирует группировку столбцов "Val" по столбцу "A". Код

test.fun<-function ()
{
    library(data.table)
    testdata<-data.table(A=rep(seq(1,5), 5), Val=rnorm(25))
    setkey(testdata, A)
    res<-testdata[,{list(Ct=length(Val),Total=sum(Val),Avg=mean(Val))},"A"]
    return(res)
}

когда я создаю эту функцию в обычном сеансе R, а затем запускаю функцию, она работает так, как ожидалось.

> res<-test.fun()
data.table 1.8.0  For help type: help("data.table")
> res
     A Ct      Total        Avg
[1,] 1  5 -0.5326444 -0.1065289
[2,] 2  5 -4.0832062 -0.8166412
[3,] 3  5  0.9458251  0.1891650
[4,] 4  5  2.0474791  0.4094958
[5,] 5  5  2.3609443  0.4721889

когда я помещаю эту функцию в пакет, установите пакет, загрузите пакет, а затем запустить функцию, я получаю сообщение об ошибке.

> library(testpackage)
> res<-test.fun()
data.table 1.8.0  For help type: help("data.table")
Error in `[.data.frame`(x, i, j) : object 'Val' not found

может кто-нибудь объяснить мне, почему это происходит и что я могу сделать, чтобы это исправить. Любая помощь очень ценится.

2 59

2 ответа:

предположение Андри верно, +1. На нем есть FAQ (см. vignette("datatable-faq")), а также новый виньетка импорт data.table:

FAQ 6.9: я создал пакет, который зависит от данных.стол. Как я убедитесь, что мой пакет-это данные.table-aware так что наследование от данные.каркас работает?

либо я) включают в себя data.table на Depends: поле вашего файла описания, или ii) включить data.table на

вот полный рецепт:

1) Добавить data.table до Imports в своем .

2) Добавить @import data.table в вашем договоре .R файл (т. е., the .R файл, в котором размещена ваша функция, которая выдает ошибку Error in [.data.frame(x, i, j) : object 'Val' not found).

3) типа library(devtools) и установите ваш рабочий каталог, чтобы указать на главный каталог R-пакета.

4) типа document(). Это будет гарантировать, что ваш включает в себя import(data.table) линия.

5) типа build()

6) типа install()

за хороший праймер на что build() и install() do, смотрите:http://kbroman.org/pkg_primer/.

затем, как только вы закроете свой сеанс R и войдете в следующий раз, вы можете сразу же перейти прямо с:

1) типа library("my_R_package")

2) Введите имя функции, которая находится на .R файл, упомянутый выше.

3) Наслаждайтесь! Вы не следует больше получать страшное Error in [.data.frame(x, i, j) : object 'Val' not found