2016-09-29 6 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)) 
} 

私の次の機能は、テキストファイルにheadValuetailValueを印刷することです。そのために私は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")私は(ExercisePkgTxt()ためExercisePkg()ためcode.Rとcode1.R)別個Rファイルに両方の機能を入れ試みError: could not find function "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

pkgの作成は簡単な作業ではなく、最初の試みは非常に立派です!間違いなく、Rolandが示唆したものを突き詰め、Hadleyの[R Packages](http://r-pkgs.had.co.nz)を読んだり(少なくともスキムミルして)、はるかに進んでいく。 pkg開発を合理化するために 'roxygen'と' devtools'を使う方がずっと簡単だと思います。 – hrbrmstr

+0

@hrbrmstr提案していただきありがとうございます。私はその本を注文した。 :) –

答えて

1

あなたはRoxygenとデベロッパーツールを使用しているので、あなたが次のことを実行する必要があります。

  • はインストール/ビルド前に実行document()
  • あなたのパッケージからエクスポートするすべての関数のための#' @exportディレクティブを含めますNAMESPACEファイルが更新されるようにします。
+0

'document()'を実行した後でさえ、NAMESPACEは、私が質問で提供したのと同じままです。 –

+1

また、エクスポートするすべての関数に '# '@ export'指示文を含める必要があります。 –

+0

@export ExercisePkg()、ExercisePkgTxt()? '# 'ExercisePkg(.csv)、ExercisePkgTxt(.csv)? –

関連する問題