6

研究プロジェクト用に約 30 の関数があり、入力したくありません

source(paste("C:/functions","/function1.txt",sep=""))

C:/functions私の関数のディレクトリはどこで/function1.txt、特定の関数です。

私はもう試した

files <- list.files("C:/functions")
sapply(1:length(files),source(paste("C:/functions/",files[i],sep="")))

そして、それは機能しません。エラーメッセージ:Error in match.fun(FUN) : c("'source(paste(\"C:/functions/\", ' is not a function, character or symbol", "' files[i], sep = \"\"), TRUE)' is not a function, character or symbol")

forループでも試しましたが、うまくいきません。

4

6 に答える 6

10

多くの関数のコレクションがある場合は、R パッケージを作成することもできます。利点:

  • 特にroxygen2を使用する場合に、関数と一緒にドキュメントを含める良い方法です。
  • コードを他の人に配布する簡単な方法。
  • ソースコードにテストを含めることができます。
  • を使用して、すべての関数を簡単にロードできますlibrary
  • トップレベルの機能のみをユーザーに公開し、低レベルの機能は内部使用のみに残す機能。

詳細については、R 拡張機能の記述を参照してください。

于 2012-08-29T12:16:25.713 に答える
7

seacarmody の答えのわずかな変更:

files <- list.files("C:/functions",full.names=TRUE,pattern="\\.txt")
sapply(files, source)
于 2012-08-29T12:08:14.043 に答える
6

ファイルのディレクトリを調達するためのいくつかのRコードが?sourceヘルプに記載されています。特に:

## If you want to source() a bunch of files, something like
## the following may be useful:
sourceDir <- function(path, trace = TRUE, ...) {
    for (nm in list.files(path, pattern = "\\.[RrSsQq]$")) {
        if(trace) cat(nm,":")           
        source(file.path(path, nm), ...)
        if(trace) cat("\n")
     }
}

関数を呼び出すには、次のようにします。

sourceDir("C:/function")

この関数はいつでもRprofileに入れることができます。


マイナーな点として、ファイル拡張子は.txt、です。これは、上記の関数でパターンマッチャーを次のように変更することを意味します。

pattern = "\\.txt$"
于 2012-08-29T12:04:43.343 に答える
5
files <- list.files("C:/functions")
sapply(files, function(x) source(paste0("C:/functions/", x)))

sapply2 番目の引数として関数が必要であることに注意してください。

于 2012-08-29T12:06:35.060 に答える
2

たぶん、あなたはこれを好きになるでしょう...

install.packages('R.utils')
library(R.utils)
sourceDirectory( 'C:/functions', '*.txt' )

ソーシングの良さについては ?sourceDirectory を参照してください...

Arguments

path    
A path to a directory to be sourced.

pattern 
A regular expression file name pattern to identify source code files.

recursive   
If TRUE, subdirectories are recursively sourced first, otherwise not.

envir   
An environment in which the code should be evaluated.

onError 
If an error occures, the error may stop the job, give a warning, or silently be skipped.

verbose 
A logical or a Verbose object.

... 
Additional arguments passed to sourceTo().
于 2012-08-30T05:05:45.557 に答える
1

「ファイルごとに1つの関数」というMatlabのパラダイムから逃れることは問題ありません。すべての関数を1つのmy_research_functions.R ファイルにまとめて、次のようにすることができます。source('C:/functions/my_research_functions.R')

于 2012-08-29T12:17:05.587 に答える