Rでいくつかのチュートリアルを作成しています。各Rコードは特定のフォルダーに含まれています。そこにデータファイルと他のファイルがあります。.r以下に示すように、Rstudioの作業ディレクトリを変更する必要がないように、ファイルを開いてソースを設定します。

Rで自分の作業ディレクトリを自動的に指定する方法はありますか?
loadだまされたものではなく、投稿者は同じフォルダ内の.rdata-filesを望んでsourceおり、作業ディレクトリはソースファイルのパスに設定されていません。
Rでいくつかのチュートリアルを作成しています。各Rコードは特定のフォルダーに含まれています。そこにデータファイルと他のファイルがあります。.r以下に示すように、Rstudioの作業ディレクトリを変更する必要がないように、ファイルを開いてソースを設定します。

Rで自分の作業ディレクトリを自動的に指定する方法はありますか?
loadだまされたものではなく、投稿者は同じフォルダ内の.rdata-filesを望んでsourceおり、作業ディレクトリはソースファイルのパスに設定されていません。
回答:
ソースとなるスクリプトの場所を取得するには、utils::getSrcDirectoryまたはを使用できますutils::getSrcFilename。したがって、作業ディレクトリを現在のファイルのディレクトリに変更するには、次のようにします。
setwd(getSrcDirectory()[1])
ソースからではなくコードを実行する場合、RStudioではこれは機能しません。そのためには、を使用する必要があります。rstudioapi::getActiveDocumentContext
setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
この2番目のソリューションでは、もちろん、RStudioをIDEとして使用する必要があります。
Error: 'getActiveDocumentContext' is not an exported object from 'namespace:rstudioapi'
getActiveDocumentContext()RStudio内のコンソールで実行すると、パスはとして報告されることに注意してください''。ただし、エディター部分でコード行を実行すると、期待どおりに実行されます。これは@Andruのコメントに対応する可能性があります
rstudioapiパッケージを使用しているようです。最新のものに更新してみてください。
私はこの質問が古いことを知っていますが、私もその解決策を探していました。Googleはこれを一番上にリストしています:
this.dir <- dirname(parent.frame(2)$ofile)
setwd(this.dir)
それをファイルのどこかに入れます(ただし、先頭が最適です)。そのファイルに従ってwdが変更されます。
コメントによると、これは必ずしもすべてのプラットフォームで機能するとは限りません(Windowsは機能しているようですが、一部はLinux / Macです)。このソリューションはファイルを「調達」するためのものであり、必ずしもそのファイルでチャンクを実行するためのものではないことに注意してください。
「ソース」ファイルのファイル名とパスの取得も参照してください
Error in dirname(parent.frame(2)$ofile) : a character vector argument expected
dirname(rstudioapi::getActiveDocumentContext()$path)
私にとってはうまくいきますが、rstudioapiを使いたくなく、プロジェクトに参加していない場合は、パスに記号〜を使用できます。記号〜は、(少なくともWindowsでは)デフォルトのRStudio作業ディレクトリを示します。
RStudioの作業ディレクトリが「D:/ Documents」の場合、setwd("~/proyect1")setwd( "D:/ Documents / proyect1")と同じです。
これを設定したら、次のサブディレクトリに移動できますread.csv("DATA/mydata.csv")。と同じread.csv("D:/Documents/proyect1/DATA/mydata.csv")です。
親フォルダに移動する場合は、を使用できます"../"。例:read.csv("../olddata/DATA/mydata.csv")これは次と同じですread.csv("D:/Documents/oldata/DATA/mydata.csv")
これは、使用しているコンピューターに関係なく、スクリプトをコーディングするための最良の方法です。
この答えは役立ちます:
script.dir <- dirname(sys.frame(1)$ofile)
注:正しいパスを返すには、スクリプトをソースにする必要があります
私はそれを見つけました:https : //support.rstudio.com/hc/communities/public/questions/200895567-can-user-obtain-the-path-of-current-Project-s-directory-
BumbleBeeの回答(sys.frameの代わりにparent.frameを使用)が機能しませんでした。常にエラーが発生します。
rstudio、あなたは自動的に使用してスクリプトのディレクトリに作業ディレクトリを設定することができrstudioapiをそのように:
library(rstudioapi)
# Getting the path of your current open file
current_path = rstudioapi::getActiveDocumentContext()$path
setwd(dirname(current_path ))
print( getwd() )
これは、ファイルを実行またはソースするときに機能します。
最初にパッケージrstudioapiをインストールする必要があります。パスが100%になるように印刷して、正しい場所にいることを確認しますが、これはオプションです。
ソリューション
dirname(parent.frame(2)$ofile)
私のために働いていません。
私はブルートフォースアルゴリズムを使用していますが、機能します。
File <- "filename"
Files <- list.files(path=file.path("~"),recursive=T,include.dirs=T)
Path.file <- names(unlist(sapply(Files,grep,pattern=File))[1])
Dir.wd <- dirname(Path.file)
ディレクトリを検索するときの方が簡単です:
Dirname <- "subdir_name"
Dirs <- list.dirs(path=file.path("~"),recursive=T)
dir_wd <- names(unlist(sapply(Dirs,grep,pattern=Dirname))[1])
Linuxで作業している場合、これを試すことができます。
setwd(system("pwd", intern = T) )
わたしにはできる。
pwdまた、PowerShell(現在Windowsのデフォルトシェルと見なされています)でも機能しますGet-Location。これはのエイリアスです。
この問題の解決策を探していたところ、このページにアクセスしました。私はその日付を知っていますが、以前の解決策では満足できないか、うまくいきませんでした。興味があれば、これが私の回避策です。
filename = "your_file.R"
filepath = file.choose() # browse and select your_file.R in the window
dir = substr(filepath, 1, nchar(filepath)-nchar(filename))
setwd(dir)
setwd( dirname(filepath) )か?
これは古いスレッドであることはわかっていますが、作業ディレクトリを設定する必要があるという同様の問題があり、解決策がどれも機能しませんでした。後で他の誰かがこれに遭遇した場合に備えて、これがうまくいきました:
# SET WORKING DIRECTORY TO CURRENT DIRECTORY:
system("pwd=`pwd`; $pwd 2> dummyfile.txt")
dir <- fread("dummyfile.txt")
n<- colnames(dir)[2]
n2 <- substr(n, 1, nchar(n)-1)
setwd(n2)
少し複雑ですが、基本的にはシステムコマンドを使用して作業ディレクトリを取得し、dummyfile.txtに保存します。その後、Rはdata.table :: freadを使用してそのファイルを読み取ります。残りは、ファイルに出力されたものをクリーンアップして、ディレクトリパスだけを残します。
私はクラスターでRを実行する必要があったので、最終的にどのディレクトリになるかを知る方法がありませんでした(ジョブには番号と計算ノードが割り当てられます)。これは私にとってはトリックでした。
これは古くなっていることを理解していますが、以前の回答を十分に機能させることができなかったため、BumbleBeeの回答へのコメントに記載されている同じエラーが他の誰かに発生した場合に備えて、メソッドを提供したいと思いました。
鉱山は単純なシステムコマンドに基づいています。関数に与えるのはスクリプトの名前だけです。
extractRootDir <- function(x) {
abs <- suppressWarnings(system(paste("find ./ -name",x), wait=T, intern=T, ignore.stderr=T))[1];
path <- paste("~",substr(abs, 3, length(strsplit(abs,"")[[1]])),sep="");
ret <- gsub(x, "", path);
return(ret);
}
setwd(extractRootDir("myScript.R"));
関数からの出力は次のようになります"/Users/you/Path/To/Script"。これが行き詰まっている可能性のある他の人を助けることを願っています。
ほとんどのGUIでは、ディレクトリにいるときに「開く」、ダブルクリックする、またはその他の方法で.Rファイルを実行しようとすると、特に指定されていない限り、ファイルが存在するディレクトリが作業ディレクトリであると見なされます。Mac GUIは、デフォルトの動作を変更する方法を提供します。このデフォルトの動作は、実行中のセッションで設定し、次の「起動」時に有効になる、設定の起動パネルで変更できます。あなたはまた見ているべきです:
?Startup
RStudioのドキュメントによると:
「ファイルの関連付けから起動すると、RStudioは自動的に作業ディレクトリを開いたファイルのディレクトリに設定します。」デフォルトのセットアップでは、RStudioを.Rファイルのハンドラーとして登録しますが、.Rdataおよび.R拡張子のデフォルトの「関連付け」をRStudioに設定する機能についても言及されています。Linuxで「ハンドラー」ステータスと「関連付け」ステータスが同じかどうかはわかりません。
dirname(parent.frame(2)$ofile)
私にも機能しませんが、次の(https://stackoverflow.com/a/35842176/992088で提案されているように)ubuntu 14.04で機能します
dirname(rstudioapi::getActiveDocumentContext()$path)
Error: 'getActiveDocumentContext' is not an exported object from 'namespace:rstudioapi'Ubuntu 14.04でも
UTF-8エンコーディングを使用する場合:
path <- rstudioapi::getActiveDocumentContext()$path
Encoding(path) <- "UTF-8"
setwd(dirname(path))
パッケージrstudioapiをまだインストールしていない場合は、インストールする必要があります。
これを行う別の方法を次に示します。
set2 <- function(name=NULL) {
wd <- rstudioapi::getSourceEditorContext()$path
if (!is.null(name)) {
if (substr(name, nchar(name) - 1, nchar(name)) != '.R')
name <- paste0(name, '.R')
}
else {
name <- stringr::word(wd, -1, sep='/')
}
wd <- gsub(wd, pattern=paste0('/', name), replacement = '')
no_print <- eval(expr=setwd(wd), envir = .GlobalEnv)
}
set2()
?setwd?getwd