vlambda博客
学习文章列表

R语言学习8-工作空间和文件

在本节课程中,我们学习R中有关工作空间的内容,并探索工作空间和计算机文件系统之间的关系。

由于不同的操作系统在诸如文件路径之类的东西上有不同的约定,因此某些命令的输出可能会在不同系统之间有所不同。但是,R提供了用于与文件交互的通用API(一组通用命令),这样我们的代码即可在不同类型的计算机上工作。

首先,使用getwd()R会话将哪个目录用作其当前工作空间。

> getwd()[1] "G:/code/R_code"

然后使用ls()函数列出工作空间的所有对象。

> ls()character(0)

结果是空,因为这个工作空间是新开的,里面没有任何变量。

一些R命令与LinuxMac上的等效命令相同。 LinuxMac操作系统均基于称为Unix的操作系统。了解更多关于Unix的命令有助于理解R命令。

现在我们新建一个变量x,然后再使用ls()看看。

> x <- 9> ls()[1] "x"

如果我们想看工作空间下的文件,则应该使用list.files()或者dir()

> list.files()[1] "aa.txt"
> dir()[1] "aa.txt"

可以使用?list.files来查看帮助文档。在R的帮助文档中,最有用的部分就是See Also section。阅读lis.files的该部分,其中的某些功能将会在后面用到。

把函数名作为args()函数的参数,可以查看该函数接受哪些参数。

> args(list.files)function (path = ".", pattern = NULL, all.files = FALSE,  full.names = FALSE, recursive = FALSE, ignore.case = FALSE,  include.dirs = FALSE, no.. = FALSE)

下面我们把将当前工作目录的值分配给一个名为old.dir的变量。在本课结束时,我们将使用old.dir返回到我们开始的地方。

接下来用dir.create()在当前工作空间新建一个testdir的目录。

> dir.create("testdir")

我们会在新目录下进行所有的操作,完成后再把该目录删除。Take only pictures, leave only footprints

通常,我们希望工作空间在某种程度上是合理的,可以是针对我们正在处理的特定项目创建的。所以,我们把testdir设置为新的工作空间,并使用file.create()函数在其中新建mytest.R文件。

> setwd("testdir")> > file.create("mytest.R")[1] TRUE

这应该是该目录中的唯一文件。让我们通过列出当前目录中的所有文件来进行检查。

> list.files()[1] "mytest.R"

还可以通过file.exists()函数检查文件是否在工作空间中。

> file.exists("mytest.R")[1] TRUE

这些功能对于交互使用来说是多余的。但是,如果正在运行的程序会循环访问一系列文件并对每个文件进行一些处理,则在尝试处理每个文件之前,需要检查它们是否存在。

通过使用file.info()访问有关文件mytest.R的信息。

> file.info("mytest.R") size isdir mode mtime ctime atime exemytest.R 0 FALSE 666 2020-05-22 15:44:53 2020-05-22 15:44:53 2020-05-22 15:44:53 no

还可以使用$运算符---例如:file.info("mytest.R")$mode ---来获取特定项目。

对文件进行重命名,使用file.rename()函数,对文件进行复制,使用file.copy()函数

> file.rename("mytest.R", "mytest2.R")[1] TRUE
> file.copy("mytest2.R", "mytest3.R")[1] TRUE

虽然操作系统为这些任务提供更简单的工具,但是以编程方式操作文件的功能将非常有用。试想一下,如果要处理数十个或数百万个单个文件,该怎么办?在这种情况下,绝对有必要对许多文件进行编程操作。

我们可以通过file.path()函数和dir.create()函数连用的方式,创建一个带子目录的目录。

> dir.create(file.path("testdir2", "testdir3"), recursive = TRUE)

最后,使用setwd()回到原始工作目录。回想一下,在这些问题的开头,我们创建了变量old.dir,其中包含原始工作目录的完整路径。

保存开始进行分析之前所拥有的设置,然后最后返回至它们通常会很有用。

小结

getwd():获取当前工作空间路径setwd():设置新的工作空间路径list.file():列出工作空间中的所有文件file.create():新建文件file.rename():文件重命名file.copy():文件复制file.info():获取文件所有信息dir.create():新建文件夹