Я пытается создать свой собственный R-пакет в качестве упражнения. Я следил за онлайн-уроками Hillary Parker и сумел кое-что сделать.Создание пакета игрушек на R, неспособного использовать другие функции в файле R
Пакет, который я пытаюсь сделать, принимает файл csv и печатает head() и tail() набора данных. Затем я написал еще одну функцию, которая будет печатать значение head() и tail() в текстовом файле.
ExercisePkg <- function(.csv) {
csv <- read.csv(.csv)
headValue <- head(csv)
print("The head of the dataset is:")
print(headValue)
tailValue <- tail(csv)
print("The tail of the dataset is:")
print(tailValue)
return(list(headValue, tailValue))
}
Моя следующая функция для печати headValue
и tailValue
в текстовый файл. Для этого я использую sink()
и изменить ExercisePkg
следующим образом:
ExercisePkgTxt <- function(.csv) {
sink('Report.txt')
csv <- read.csv(.csv)
headValue <- head(csv)
print("The head of the dataset is:")
print(headValue)
tailValue <- tail(csv)
print("The tail of the dataset is:")
print(tailValue)
return(list(headValue, tailValue))
sink('Report.txt', append=TRUE)
}
У меня есть обе эти функции в файле code.R как:
#' Function to see head and tail of a csv file
#'
#' Function is cool.
#' @param Do you love data? Defaults to TRUE
#' @keywords csv, data, head, tail,text.
#' @export ExercisePkg(),ExercisePkgTxt()
#' @examples no examples
#' ExercisePkg()
#' ExercisePKgTxt()
ExercisePkg <- function(.csv) {
csv <- read.csv(.csv)
headValue <- head(csv)
print("The head of the dataset is:")
print(headValue)
tailValue <- tail(csv)
print("The tail of the dataset is:")
print(tailValue)
return(list(headValue, tailValue))
}
ExercisePkgTxt <- function(.csv) {
sink('Report.txt')
csv <- read.csv(.csv)
headValue <- head(csv)
print("The head of the dataset is:")
print(headValue)
tailValue <- tail(csv)
print("The tail of the dataset is:")
print(tailValue)
return(list(headValue, tailValue))
sink('Report.txt', append=TRUE)
}
Она хранится внутри /path/ToyPackage/R/code.R
.
После того, как я установил пакет. Я попробовал проверить его.
ExercisePkg("/path/dataset.csv")
работал как очарование.
Но ExercisePkgTxt("/path/dataset.csv")
дал ошибку как Error: could not find function "ExercisePkgTxt"
Я попытался положить обе функции в отдельный файл R (code.R для ExercisePkg()
и code1.R для ExercisePkgTxt()
) и восстановить пакет. Но проблема не исчезла.
При попытке запуска document()
я получаю следующее:
>document()
Updating ToyPackage documentation
Loading ToyPackage
Writing NAMESPACE
Writing ExercisePkg.Rd
>
Файл NAMESPACE выглядит следующим образом:
# Generated by roxygen2: do not edit by hand
export("ExercisePkg(),ExercisePkgTxt()")
И когда я пытаюсь установить пакет установки ("ToyPackage"). Я получаю следующую ошибку:
* installing *source* package 'ToyPackage' ...
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
*** arch - i386
Error in namespaceExport(ns, exports) :
undefined exports: ExercisePkg(),ExercisePkgTxt()
Error: loading failed
Execution halted
*** arch - x64
Error in namespaceExport(ns, exports) :
undefined exports: ExercisePkg(),ExercisePkgTxt()
Error: loading failed
Execution halted
ERROR: loading failed for 'i386', 'x64'
* removing 'C:/Users/user/Documents/R/win-library/3.3/ToyPackage'
Error: Command failed (1)
Что я делаю неправильно?
Пожалуйста, не давайте мне совсем новый код, просто предложите некоторые изменения, если они есть.
Спасибо.
Как выглядит ваш файл NAMESPACE? Вы загрузили пакет после его сборки? Вы знаете, что код в функции после вызова 'return' никогда не выполняется? – Roland
Создание pkgs - это не тривиальная задача, и вы первая попытка очень похвальна!Определенно тыкать, что предложил Роланд, и я определенно прочитал (или, по крайней мере, проскользнул через) [R Packages] (http://r-pkgs.had.co.nz) Хэдли, прежде чем продолжить гораздо дальше. Я думаю, вы обнаружите, что вам проще использовать «roxygen» и «devtools» для оптимизации разработки pkg. – hrbrmstr
@hrbrmstr Спасибо за предложение. Я заказал книгу. :) –