在R中,我想访问子文件夹中的某个文件。但我不想改变工作目录然后再回来。它浪费了很多时间。
例如,我在/home/phuong
文件夹上工作。
这是phuong的树形结构。
phuong-> data1, data2, data3.
data1-> abc.csv, def.csv, script1.R
data2-> bond.csv, option.csv, pricing.R
data3->.....
所以我想在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")
我丢失了很多次从文件夹移动到另一个文件夹,但所有文件夹都位于同一文件夹home/phuong/
中。
所以我需要一些方法来访问子文件夹中没有setwd
命令的任何文件。
请帮帮我,
答案 0 :(得分:33)
假设您的工作目录为/home/hermie
并且您想要从当前WD下方的目录中加载.csv
文件(让我们说/home/hermie/data
),您只需执行此操作这样:
setwd('/home/hermie')
myData <- read.csv('./data/myCsvFile.csv')
当然你也可以向上导航&#34;向上&#34;在目录树中。我们假设您要在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
希望这有帮助。
<强> 更新 强>
不知何故,我认为你希望有人为你编写解决方案......我建议:
> setwd('/home/phuong')
> data_abc <- read.csv('./data1/abc.csv')
> data_def <- read.csv('./data1/def.csv')
> source('./data2/pricing.R')
真的这样难以写这个吗?如果你在每一步都改变你的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
然后,从R:
> setwd('/home/phuong')
> data_abc <- read.csv('data_abc.csv')
> data_def <- read.csv('data_def.csv')
> source('pricing.R')
答案 1 :(得分:13)
如果我了解你之后的情况,你可以使用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")
如果您有很多东西需要阅读,这可能是值得的,否则为什么不提供实际功能的整个路径?如果这对我来说仍然是一个有趣的学习经历之后的事情: - )
答案 2 :(得分:0)
对我而言,学习导航文件夹的最直观方法是使用list.files("../")
。您将看到需要从当前位置导航的上游还是下游:)
答案 3 :(得分:0)
我不知道这是否是您要寻找的东西,但是我在特定的github文件夹中有一个文件库,当我在新分支中初始化项目时,该文件库就是我提供的,并且我在网上找到了这样的解决方案:
setwd("~/repos/library/all_the_things")
library_files <- list.files()
sapply(library_files, source)
太好了,除了现在我要在目录中启动我不想保存绘图等的所有文件,所以我意识到所需要做的只是这个:
library_files <- list.files("~/repos/library/all_the_things", full.name=T)
sapply(library_files, source)
现在,它无需更改目录即可运行它们。
答案 4 :(得分:0)