将工作目录设置为R中的脚本文件的父文件夹
我想将我的脚本的工作目录设置为文件的父目录。将工作目录设置为R中的脚本文件的父文件夹
我的文件夹结构谟/代码/ test.R
在脚本“test.R”,我写道:
getwd()
setwd(dirname(getwd()))
print(getwd())
然而,工作目录将取决于在哪里源脚本在终端。
在终端方面,我公司推出从文件夹“项目”和“项目/代码”的剧本,并得到以下结果:
~/Documents/project: Rscript code/test.R
~/Documents/project
~/Documents
~/Documents/project/code: Rscript test.R
~/Documents/project/code
~/Documents/project
我想找到的目录的方式在该文件位于。
我的会话信息是在这里:
> sessionInfo()
R version 3.4.0 (2017-04-21)
Platform: x86_64-apple-darwin16.5.0 (64-bit)
Running under: macOS Sierra 10.12.6
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] bindrcpp_0.2 dplyr_0.7.2
loaded via a namespace (and not attached):
[1] Biobase_2.36.2 jsonlite_1.5
[3] bit64_0.9-7 splines_3.4.0
[5] Formula_1.2-2 assertthat_0.2.0
[7] stats4_3.4.0 latticeExtra_0.6-28
[9] blob_1.1.0 GenomeInfoDbData_0.99.0
[11] yaml_2.1.14 RSQLite_2.0
[13] backports_1.1.0 lattice_0.20-35
[15] glue_1.1.1 digest_0.6.12
[17] GenomicRanges_1.28.4 RColorBrewer_1.1-2
[19] XVector_0.16.0 checkmate_1.8.3
[21] colorspace_1.3-2 htmltools_0.3.6
[23] Matrix_1.2-10 plyr_1.8.4
[25] DESeq2_1.16.1 XML_3.98-1.9
[27] pkgconfig_2.0.1 pheatmap_1.0.8
[29] genefilter_1.58.1 zlibbioc_1.22.0
[31] purrr_0.2.3 xtable_1.8-2
[33] scales_0.4.1 BiocParallel_1.10.1
[35] htmlTable_1.9 tibble_1.3.3
[37] annotate_1.54.0 IRanges_2.10.2
[39] ggplot2_2.2.1 SummarizedExperiment_1.6.3
[41] nnet_7.3-12 BiocGenerics_0.22.0
[43] lazyeval_0.2.0 survival_2.41-3
[45] magrittr_1.5 evaluate_0.10.1
[47] memoise_1.1.0 foreign_0.8-69
[49] tools_3.4.0 data.table_1.10.4
[51] matrixStats_0.52.2 stringr_1.2.0
[53] S4Vectors_0.14.3 munsell_0.4.3
[55] locfit_1.5-9.1 cluster_2.0.6
[57] DelayedArray_0.2.7 AnnotationDbi_1.38.2
[59] compiler_3.4.0 GenomeInfoDb_1.12.2
[61] rlang_0.1.2 grid_3.4.0
[63] RCurl_1.95-4.8 rstudioapi_0.6
[65] htmlwidgets_0.9 rmarkdown_1.6
[67] bitops_1.0-6 base64enc_0.1-3
[69] labeling_0.3 gtable_0.2.0
[71] DBI_0.7 R6_2.2.2
[73] gridExtra_2.2.1 knitr_1.17
[75] bit_1.1-12 rprojroot_1.2
[77] bindr_0.1 Hmisc_4.0-3
[79] stringi_1.1.5 parallel_3.4.0
[81] Rcpp_0.12.12 geneplotter_1.54.0
[83] rpart_4.1-11 acepack_1.4.1
感谢。
Best,C.
我试过dirname(parent.frame(2)$ofile)
和dirname(sys.frame(2)$ofile)
方法,但都没有和我一起工作真的很好(我是R上3.4.1,使用RStudio,和Windows 10)。我试图在RStudio和R GUI中获取它。也试图从命令行运行它。
以下来自用户rakensi(https://*.com/users/1021892/rakensi)的方法对我而言确实很好。积分归功于他。 链接回答:Getting path of an R script。
另一种方法(test_v2.R)适用于我使用Rscript。积分转到用户蒸笼25(https://*.com/users/93345/steamer25)和链接到答案(Rscript: Determine path of the executing script)。
test.R运行此使用源(test.R)在Rstudio
## Run this from ~/Documents/project/code or directory of your choice
script.dir <- getSrcDirectory(function(x) {x})
print(script.dir)
# gives you ~/Documents/project/code
setwd(script.dir)
test_v2.R运行此使用Rscript.exe
thisFile <- function() {
cmdArgs <- commandArgs(trailingOnly = FALSE)
needle <- "--file="
match <- grep(needle, cmdArgs)
if (length(match) > 0) {
# Rscript
return(normalizePath(sub(needle, "", cmdArgs[match])))
} else {
# 'source'd via R console
return(normalizePath(sys.frames()[[1]]$ofile))
}
}
script.dir <- dirname(thisFile())
setwd(script.dir)
print(getwd())
这会将目录更改为源文件位置。
this.dir <- dirname(parent.frame(2)$ofile)
setwd(this.dir)
我用此代码,但得到以下错误:在dirname中的错误(parent.frame(2)$ ofile): 一个字符向量参数expe cted 执行停止 – charlesdarwin
并且print(parent.frame(2)$ ofile)给出NULL。 – charlesdarwin
好的,如果你从'项目'的文件中找到这个文件,这只会适用于你。你有rstudio吗?如果是这样,这应该工作: 'setwd(dirname(rstudioapi :: getActiveDocumentContext()$ path))'。 –
嗨,不幸的是这并不适用于我:〜/ code:Rscript test.R character(0) 错误setwd(script.dir):字符参数预计 执行停止 – charlesdarwin
@charlesdarwin您是如何运行脚本的?我会在RStudio中获取这个脚本来获得预期的结果。你是从cmd提示符运行它(或者在你的情况下可能是终端)? – addicted
如果您从命令提示符(使用Rscript.exe)运行它,可能我有其他解决方案可行(请参阅我在上面的答案中的编辑)。感谢用户steamer25(https://*.com/users/93345/steamer25)。 – addicted