0

パッケージ生成の手順を自動化しようとしていますが、新しく生成されたパッケージを保存する場所を R に伝えることができないようです。

ここに私の問題のより詳細な説明があります:

まず、関数 (または複数の関数) を作成し、パッケージの生成に使用されるソース ディレクトリ ("C:/Users/Raphael/Documents/Stats/R/Package_Forge/testpack_SourceFiles") に別のファイルとして保存します。説明のために、次のテスト関数 (ファイル: testpack_test.R) を使用しています。ご覧のとおり、Hadley Wickham の roxygen パッケージを使用しています。

#' @rdname f.test
#' @title Test function
#' @description This function squares a given number.
#' @param x Number
#' @return The function returns a number
#' @export
#' 
f.test=function(x){
  x=x^2
  return(x)
}

次に、次のスクリプトを使用してパッケージを生成します。この例では、1 つの関数 (f.test) のみが含まれています。

#######################
#*** Load packages ***#
#######################
# Set library path
.libPaths("C:/Users/Raphael/Documents/Stats/R/Package_Use")

#install.packages("roxygen2")
library(digest)
library(roxygen2)

###################
#*** Set paths ***#
###################
# Define Path
pkForge="C:/Users/Raphael/Documents/Stats/R/Package_Forge"
pkUse="C:/Users/Raphael/Documents/Stats/R/Package_Use"
newPk=file.path(pkForge,"testpack")
newPkS=file.path(pkForge,"testpack_SourceFiles")
newPkR=file.path(newPk,"R") #"R" folder that will contain functions
newPkD=file.path(newPk,"DESCRIPTION") #Description file

############################################
#*** Generate directories and add files ***#
############################################
# Generate main directory of new package
if(file.exists(newPk)){
  cat("\nExisting directory deleted!")
  unlink(newPk,recursive=T) #deletes old directory
  cat("\nNew directory generated!\n",newPk)
  dir.create(newPk)
}else{
  cat("\nNew directory generated!\n",newPk)
  dir.create(newPk)
}

# Generate "R" sub directory of new package
dir.create(newPkR)

# Add all scripts in the source directory to "R" sub directory
# Note: roxygen code should be used for function annotation
allScripts=list.files(newPkS,"^testpack_.*?\\.R$", full.names=T, ignore.case=T) #uses regex to only select certain files; returns the entire path 
file.copy(allScripts, newPkR)

# Generate a new description file in the package main directory
fileConn=file(newPkD,open="w")
writeLines(c("Package: testpack",
             "Type: Package",
             "Title: Test package",
             "Version: 1.0",
             "Date: 2013-08-04",
             "Author: XYZ",
             "Maintainer: XYZ <xyz@gmail.com>",
             "Description: This package contains one test function",
             "License:GPL-2"),fileConn)
close(fileConn)
# file.show(newPkD) #shows the content of new file

############################
#*** Roxygenize package ***#
############################
# list.files(MyPackages) 
roxygenize(newPk)

#######################
#*** Build package ***#
#######################
cmd=paste("R CMD build ", shQuote(newPk)," --no-manual --no-resave-data", sep="")
system(cmd) #using a system call to build the package

この最後のシステム コールは、ソース パッケージを正しくビルドします。ただし、問題は、何らかの理由で「tarball」(testpack_1.0.tar.gz) が常に C:/Users/Raphael/Documents に保存され、出力ディレクトリを指定できないように見えることです。tarball を pkUse ディレクトリ ("C:/Users/Raphael/Documents/Stats/R/Package_Use") に直接保存したいと考えています。これは、インストールしたすべてのライブラリに使用するフォルダです。「cmd」文字列のさまざまな場所に pkUse ディレクトリを追加しようとしました (「R CMD build \"C:/Users/Raphael/Documents/Stats/R/Package_Forge/testpack\" --no-manual --no- resave-data") しかし、常にエラーが発生します。上記のシステムコールで出力ディレクトリを指定する方法を知っている人はいますか? devtools パッケージがこれを実行できることは知っていますが、システム コールを使用できるようにしたいと考えています。

ベスト、ラファエル

4

2 に答える 2

0

使えますsinkか?

sink(x)必要なディレクトリとファイル形式に出力を書き込みます。

于 2013-08-04T18:22:37.550 に答える