6

フォルダのリストがあります。各フォルダーには、フォルダー内のファイルに対して実行する必要がある R の同一のスクリプトがあります。スクリプトを 1 回作成し、スクリプトを各フォルダーにコピーしました。問題は、約 100 個のフォルダーのリストがあるため、現在の作業ディレクトリに手動で setwd() することができないことです。たとえば「。」を使用して現在の作業ディレクトリを設定できるかどうかを知りたいです。この上:

setwd("/User/myname/./")

または、フォルダー名を毎回入力する代わりに、Rに現在の作業ディレクトリを伝える別の簡単な方法です。

4

3 に答える 3

7

これはどう?

# set the working directory to the main folder containing all the directories
setwd( "/user/yourdir/" )

# pull all files and folders (including subfolders) into a character vector
# keep ONLY the files that END with ".R" or ".r"
r.scripts <- list.files( pattern=".*\\.[rR]$" , recursive = TRUE )

# look at the contents.. now you've got just the R scripts..
# i think that's what you want?
r.scripts

# and you can loop through and source() each one
for ( i in r.scripts ) source( i )
于 2013-02-22T14:46:39.427 に答える
3

私が理解している限り、スクリプトが多数のフォルダーに分散されている R スクリプトのバッチをトリガーしたいと考えています。

個人的には、R で行うのではなく、シェル スクリプト (または OS と同等のもの) を作成してこれを行うと思います。

for dir in /directoriesLocation/*/
do
    cat $dir/scriptName.R | R --slave --args $arg1 $arg2
done

$dirは、R スクリプトscriptName.Rを含むすべてのディレクトリの場所です。

于 2013-02-22T14:42:45.553 に答える
3

他の優れた回答に加えて、source関数にはchdir、作業ディレクトリを一時的にソース ファイルがあるディレクトリに変更する引数があります。

list.files1 つのオプションは、および/または他のツールを使用して、各スクリプト ファイルのファイル名 (パスを含む) を含むベクターを作成することです。次にsource、これらの各ファイルと、ハンドルを使用して作業ディレクトリを設定しますsourcechdir

于 2013-02-22T17:17:49.450 に答える