R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。
R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。
要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。
前言
R语言作为脚本语言,有一套文件系统管理的功能函数,也可以实现如Python一样的系统管理功能。
本文将详细介绍,R语言的文件系统管理。试试有什么不样吧?
目录
文件系统介绍
目录操作
文件操作
几个特殊的目录
3.5 硬连接和软连接
硬连接,指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
软连接,也叫符号连接(Symbolic Link)。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
硬连接和软连接,只在Linux系统中使用。
# 硬连接
> file.link("readme.txt", "hard_link.txt")
[1] TRUE
# 软连接
> file.symlink("readme.txt", "soft_link.txt")
[1] TRUE
# 查看文件目录
> system("ls -l")
-rwx------ 1 conan conan 70 Nov 14 12:55 AA.txt
-rw-rw-r-- 1 conan conan 7 Nov 14 12:51 B.txt
dr-xr-xr-x 2 conan conan 4096 Nov 14 08:36 create
-rw-rw-r-- 1 conan conan 70 Nov 14 12:56 C.txt
-rw-rw-r-- 2 conan conan 7 Nov 14 08:24 hard_link.txt
-rw-rw-r-- 2 conan conan 7 Nov 14 08:24 readme.txt
lrwxrwxrwx 1 conan conan 10 Nov 14 13:11 soft_link.txt -> readme.txt
文件hard_link.txt是文件readme.txt硬连接文件,文件soft_link.txt是文件readme.txt软连接文件,
3.5 删除文件
有两个函数可以使用file.remove和unlink,其中unlink函数使用同删除目录操作是一样的。
# 删除文件
> file.remove("A.txt", "B.txt", "C.txt")
[1] FALSE TRUE TRUE
# 删除文件
> unlink("readme.txt")
# 查看目录文件
> system("ls -l")
total 12
-rwx------ 1 conan conan 70 Nov 14 12:55 AA.txt
dr-xr-xr-x 2 conan conan 4096 Nov 14 08:36 create
-rw-rw-r-- 1 conan conan 7 Nov 14 08:24 hard_link.txt
lrwxrwxrwx 1 conan conan 10 Nov 14 13:11 soft_link.txt -> readme.txt
# 打印硬连接文件
> readLines("hard_link.txt")
[1] "file A"
# 打印软连接文件,soft_link.txt,由于原文件被删除,有错误
> readLines("soft_link.txt")
Error in file(con, "r") : cannot open the connection
In addition: Warning message:
In file(con, "r") :
cannot open file 'soft_link.txt': No such file or directory
R.home() 查看R软件的相关目录
.Library 查看R核心包的目录
.Library.site 查看R核心包的目录和root用户安装包目录
.libPaths() 查看R所有包的存放目录
system.file() 查看指定包所在的目录
4.1 R.home() 查看R软件的相关目录
# 打印R软件安装目录
> R.home()
[1] "/usr/lib/R"
# 打印R软件bin的目录
> R.home(component="bin")
[1] "/usr/lib/R/bin"
# 打印R软件文件的目录
> R.home(component="doc")
[1] "/usr/share/R/doc"
通过系统命令,找到R文件的位置。
# 检查系统中R文件的位置
~ whereis R
R: /usr/bin/R /etc/R /usr/lib/R /usr/bin/X11/R /usr/local/lib/R /usr/share/R /usr/share/man/man1/R.1.gz
# 打印环境变量R_HOME
~ echo $R_HOME
/usr/lib/R
通过R.home()函数,我们可以很容易的定位R软件的目录。
4.2 R软件的包目录
# 打印核心包的目录
> .Library
[1] "/usr/lib/R/library"
# 打印核心包的目录和root用户安装包目录
> .Library.site
[1] "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"
[3] "/usr/lib/R/library"
# 打印所有包的存放目录
> .libPaths()
[1] "/home/conan/R/x86_64-pc-linux-gnu-library/3.0"
[2] "/usr/local/lib/R/site-library"
[3] "/usr/lib/R/site-library"
[4] "/usr/lib/R/library"
4.3 查看指定包所在的目录
# base包的存放目录
> system.file()
[1] "/usr/lib/R/library/base"
# pryr包的存放目录
> system.file(package = "pryr")
[1] "/home/conan/R/x86_64-pc-linux-gnu-library/3.0/pryr"
其实,用R语言操作文件系统还是很方便的。但对于函数命名确实不太规范,需要我们花时间记忆。