在R中,我想访问子文件夹中的某个文件.但我不想改变工作目录然后再回来.它浪费了很多时间.
例如,我在/home/phuong文件夹上工作.这是phuong的树形结构.
phuong-> data1, data2, data3.
data1-> abc.csv, def.csv, script1.R
data2-> bond.csv, option.csv, pricing.R
data3->.....
Run Code Online (Sandbox Code Playgroud)
所以我想在abc.csv,def.csv中加载数据并在pricing.R中运行代码.
因此,如果使用代码setwd,它会让我失去很多时间,看起来代码如此愚蠢,像这样:
setwd("/home/phuong/data1" );
read.csv("abc.csv");
read.csv("def.csv");
setwd("/home/phuong/data2" );
source("pricing.R")
Run Code Online (Sandbox Code Playgroud)
我失去了很多次从文件夹移动到另一个文件夹,但所有文件夹都在同一个文件夹中home/phuong/.所以我需要一些方法来访问子文件夹中的任何文件而无需setwd命令.请帮帮我,谢谢.
Bar*_*nka 37
假设您的工作目录是,/home/hermie并且您想要.csv从当前WD下面的目录中加载文件(比方说/home/hermie/data),您可以这样做:
setwd('/home/hermie')
myData <- read.csv('./data/myCsvFile.csv')
Run Code Online (Sandbox Code Playgroud)
当然,您也可以在目录树中"向上"导航.假设你想在Bob的主目录(/home/bob)中加载一个文件.你可以这样做:
setwd('/home/hermie')
data_from_bob <- read.csv('../bob/otherDataFile.csv') # Of course, this will work
# only if you can read
# files from that directory
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
更新
不知怎的,我想你想让别人为你编写解决方案...我建议:
> setwd('/home/phuong')
> data_abc <- read.csv('./data1/abc.csv')
> data_def <- read.csv('./data1/def.csv')
> source('./data2/pricing.R')
Run Code Online (Sandbox Code Playgroud)
难道真的这么难治写?如果你在每一步都改变你的WD,你将不得不写更多.
而且,关于我对符号链接的消化,在你的bash终端上,你可以这样做:
$ cd /home/phuong
$ ln -s ./data1/abc.csv data1_abc.csv
$ ln -s ./data1/def.csv data1_def.csv
$ ln -s ./data2/pricing.R pricing.R
Run Code Online (Sandbox Code Playgroud)
然后,来自R:
> setwd('/home/phuong')
> data_abc <- read.csv('data_abc.csv')
> data_def <- read.csv('data_def.csv')
> source('pricing.R')
Run Code Online (Sandbox Code Playgroud)
Tyl*_*ker 15
如果我理解你所追求的是什么,你可以使用Hadley称之为Advanced R的闭包:
## Make a function that takes a path and another function
## and returns that same function with the path pre-progammed in
pathit <- function(FUN, path){
function(file, ...){
FUN(file=file.path(path, file), ...)
}
}
## generate new functions that have the path pre-programmed in
read.csv2b <- pathit(read.csv, "home/phuong/data1")
source2 <- pathit(source, "home/phuong/data2")
read.csv2b("abc.csv")
read.csv2b("def.csv")
source2("pricing.R")
Run Code Online (Sandbox Code Playgroud)
如果您有很多东西需要阅读,这可能是值得的,否则为什么不提供实际功能的整个路径?如果这不是你想要的,那对我来说仍然是一个有趣的学习经历:-)