Использовать данные.таблица пакет внутри моего собственного пакета
Я пытаюсь использовать эти данные.таблица пакет внутри моего собственного пакета. МВт выглядит следующим образом:
Я создаю функцию, тест.весело, что просто создает небольшие данные.объект таблицы, а затем суммирует группировку столбцов "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 ответа:
предположение Андри верно, +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