R list.files(my_working_directory) 没有显示文件,但我知道它们在那里。怎么修?
Posted
技术标签:
【中文标题】R list.files(my_working_directory) 没有显示文件,但我知道它们在那里。怎么修?【英文标题】:R list.files(my_working_directory) shows no files but I know they are there. How to fix? 【发布时间】:2013-08-06 14:48:28 【问题描述】:我正在尝试使用外部硬盘驱动器中的目录作为工作目录来使用 R。我可以将工作目录设置到我想要的位置,但是当我使用list.files
R 时什么都看不到。我也不能使用read.delim
来加载文件。
例如:
> rm(list = ls())
> WD<-"../../../Volumes/My_HD/my_working_directory"
> setwd(WD)
> getwd()
[1] "/Volumes/My_HD/my_working_directory"
到目前为止一切都很好,但是:
> list.files(WD)
character(0)
虽然我希望有一份我知道的文件列表,但我可以使用 Finder 和终端查看和打开这些文件。实际上,R 脚本本身就在该目录中。
如果我尝试打开一个文件,我会得到这样的结果:
> myfile <- read.delim(paste(WD,"/file_name", sep = ""), header = T)
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
cannot open file '../../../Volumes/My_HD/my_working_directory/file_name': No such file or directory
我以为我在指定目录路径时做错了,但我尝试从 RStudio 指向并单击(会话>设置工作目录和>到源文件位置或>选择目录...)并得到相同的结果结果不开心。
我在 MacBookPro (OS X 10.7.05) 上使用 R 版本 2.15.1。我从 RStudio 版本 0.97.551 运行 R,但问题与 RStudio 无关,因为当我直接在 R 上尝试时也会发生这种情况。
任何帮助将不胜感激。谢谢。
【问题讨论】:
设置工作目录后list.files(getwd())
会返回什么?由于我不明白的原因,我发现 R 对相对路径有点敏感。
很简单,你的文件夹路径不对。
@Peter list.files(getwd())
为我提供了所需的文件列表,但仅list.files
就一直失败。确实很奇怪。我想我将更改我的代码以用 getwd() 替换我的 WD 目录对象。谢谢。只是出于好奇,@RomanLuštrik 我的路出了什么问题?如果我尝试从 RStudio 指向并单击,我会得到相同的结果和
因为WD
是一个相对 路径,所以list.files(WD)
只会在您执行setwd(WD)
之前起作用。在您执行setwd(WD)
之后,所有这些都应该工作:list.files()
或list.files('.')
或list.files(getwd())
。如果WD
是绝对 路径("/Volumes/My_HD/my_working_directory"
),list.files(WD)
将适用于您当前的目录。
如何解决? 你可以 1) 在任何地方使用绝对路径,即设置 WD <- "/Volumes/My_HD/my_working_directory"
或 2) 保持 WD
原样,但在你之后 @987654341 @,使用本地目录'.'
代替WD
。
【参考方案1】:
由于我认为您希望在您的路径中保持一些相对性,并且因为您使用的是 RStudio,所以我将分享一种我经常使用的策略。如果我正确地猜到了你在寻找什么,这应该完全回避这个问题。
首先在 RStudio 中创建一个新项目。打开该项目后,您会发现您的工作目录getwd()
将方便地设置在您的项目文件所在的位置。
如果您正在做更大的事情,您可以使用“ProjectTemplate”包让自己走上正轨。在我的系统上:
# install.packages(c("ProjectTemplate"))
library(ProjectTemplate)
create.project("~/Desktop/MyProject")
这设置了一个项目框架,包括单元测试文件夹、doc 文件夹以及我可能需要的“正确”R 项目的所有其他内容。
接下来我从上面提到的 RStudio 创建一个项目。从现有目录创建它。项目将打开,您的所有路径都将相对于“MyProject”文件夹的根目录。
我还喜欢在使用 git 存储库时对其进行初始化。从 OS X 终端窗口:
$ cd ~/Desktop/MyProject; git init
...然后添加/提交裸骨架
$ git add * ; git commit -m "initial project skeleton"
从您的 RStudio 会话中,您可以加载与项目根目录相关的内容。假设您的数据子文件夹中有 iris.csv:
read.csv("./data/iris.csv", header=TRUE)
【讨论】:
我认为@flodel 对绝对和相对路径的评论更适合我的问题,因为我得到了一个脚本,它在多个点使用对象 WD 并且无法使其工作。以上是关于R list.files(my_working_directory) 没有显示文件,但我知道它们在那里。怎么修?的主要内容,如果未能解决你的问题,请参考以下文章