Если я использую исходный код, то все работает, но когда я создаю пакет/функцию, это дает мне ошибку. Я что-то упустил?
тестовый пакет
тест ‹- функция () {
library("data.table")
dd <- mtcars
setDT(dd)
dd$cnt <- 1
eval(parse(text=paste0("dd <- unique(dd[,list(cnt, mpg, cyl)])")))
eval(parse(text=paste0("dd1 <- dd[order(mpg, cyl)]")))
print(dd1)
}
создайте пакет, используя сборку R CMD для Linux
test |__R |__test.r |__DESCRIPTION |__NAMESPACE
Тест сборки R CMD
R CMD УСТАНОВИТЬ test_1.0.tar.gz
Содержание ОПИСАНИЯ
Package: test Title: test Version: 1.0 Authors@R: person("xyz", "xyz", email = "[email protected]", role = c("aut", "cre")) Description: test Depends: R (>= 3.6.0) License: test Encoding: UTF-8 LazyData: true Imports: data.table
использовать функцию в R
библиотека ("тест")
тестовое задание()
Получите сообщение об ошибке, как показано ниже
Ошибка в [.data.frame
(x, i, j): объект 'cnt' не подходит
Код R без пакета и он работает
library("data.table")
dd <- mtcars
setDT(dd)
dd$cnt <- 1
eval(parse(text=paste0("dd <- unique(dd[,list(cnt, mpg, cyl)])")))
eval(parse(text=paste0("dd1 <- dd[order(mpg, cyl)]")))
print(dd1)
package.skeleton()
и посмотрите, что она создает — для создания пакета требуется нечто большее. Полная информация содержится в руководстве Writing R Extensions. (И мой пакетpkgKitten
помогает с некоторой постобработкойpackage.skeleton()
, которая оставляет некоторые вещи, которые вы должны отредактировать, что сбивает с толку, когда вы начинаете. В RStudio также есть помощник генератора пакетов, как и в других пакетах.) - person Dirk Eddelbuettel   schedule 23.02.2020package.skeleton()
должны стать вашими новыми лучшими друзьями. Меня просто немного смущает, что он никогда не пройдетR CMD check --as-cran
сразу после создания, следовательно,pkgKitten
. Но я использую тот же подход, что и вы: попробуйте сначала с минимальным количеством помощников, чтобы действительно понять минимальную структуру. - person Dirk Eddelbuettel   schedule 23.02.2020dd[, cnt:=1]
для создания столбца data.table. И вам не нужноeval(parse(txt))
, но это действительно другой вопрос ... - person Dirk Eddelbuettel   schedule 23.02.2020data.table
иногда требует особого внимания. Выimport()
сделали это вNAMESPACE
? (И, конечно, у вас не должно быть вызововlibrary()
в коде R в пакете. Посмотрите, что еще говорятR CMD check
и/или кнопкаcheck
в RStudio). - person Dirk Eddelbuettel   schedule 23.02.2020