2016-09-29 2 views
0

Я пытается создать свой собственный 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) 

Что я делаю неправильно?

Пожалуйста, не давайте мне совсем новый код, просто предложите некоторые изменения, если они есть.

Спасибо.

+1

Как выглядит ваш файл NAMESPACE? Вы загрузили пакет после его сборки? Вы знаете, что код в функции после вызова 'return' никогда не выполняется? – Roland

+1

Создание pkgs - это не тривиальная задача, и вы первая попытка очень похвальна!Определенно тыкать, что предложил Роланд, и я определенно прочитал (или, по крайней мере, проскользнул через) [R Packages] (http://r-pkgs.had.co.nz) Хэдли, прежде чем продолжить гораздо дальше. Я думаю, вы обнаружите, что вам проще использовать «roxygen» и «devtools» для оптимизации разработки pkg. – hrbrmstr

+0

@hrbrmstr Спасибо за предложение. Я заказал книгу. :) –

ответ

1

Поскольку вы используете Roxygen и DevTools, что вам нужно сделать следующее:

  • Включите #' @export директиву для каждой функции, которую вы хотите экспортировать из пакета
  • Запуск document() перед сборкой/установкой пакета, чтобы обновить файл NAMESPACE.
+0

Даже после того, как я запустил 'document()', NAMESPACE остался такой же, как я указал в вопросе. –

+1

Вам также необходимо включить директивы '# '@ export' для всех функций, которые вы хотите экспортировать. –

+0

Как '# '@export ExercisePkg(), ExercisePkgTxt()?' Или '#' @export ExercisePkg (.csv), ExercisePkgTxt (.csv)?' –

Смежные вопросы