1. 文件系统介绍

R语言对文件系统的操作,包括文件操作和目录操作,函数API都定义在base包中。

2. 目录操作

2.1 查看目录

查看当前目录下的子目录。


  1. # 启动R程序
  2. ~ R
  3. # 当前的目录
  4. > getwd()
  5. [1] "/home/conan/R/fs"
  6. # 查看当前目录的子目录
  7. > list.dirs()
  8. [1] "." "./tmp"

查看当前目录的子目录和文件。


  1. > dir()
  2. [1] "readme.txt" "tmp"
  3. # 查看指定目录的子目录和文件。
  4. > dir(path="/home/conan/R")
  5. [1] "A.txt" "caTools"
  6. [3] "chinaWeather" "DemoRJava"
  7. [5] "env" "FastRWeb"
  8. [7] "font" "fs"
  9. [9] "github" "lineprof"
  10. [11] "pryr" "readme.txt"
  11. [13] "RMySQL" "RServe"
  12. [15] "rstudio-server-0.97.551-amd64.deb" "websockets"
  13. [17] "x86_64-pc-linux-gnu-library"
  14. # 只列出以字母R开头的子目录或文件
  15. > dir(path="/home/conan/R",pattern='^R')
  16. [1] "RMySQL" "RServe"
  17. # 列出目录下所有的目录和文件,包括隐藏文件,如 .A.txt
  18. > dir(path="/home/conan/R",all.files=TRUE)
  19. [1] "." ".."
  20. [3] ".A.txt" "A.txt"
  21. [5] "caTools" "chinaWeather"
  22. [7] "DemoRJava" "env"
  23. [9] "FastRWeb" "font"
  24. [11] "fs" "github"
  25. [13] "lineprof" "pryr"
  26. [15] "readme.txt" "RMySQL"
  27. [17] "RServe" "rstudio-server-0.97.551-amd64.deb"
  28. [19] "websockets" "x86_64-pc-linux-gnu-library"

查看当前目录的子目录和文件,同dir()函数。


  1. > list.files()
  2. [1] "readme.txt" "tmp"
  3. > list.files(".",all.files=TRUE)
  4. [1] "." ".." "readme.txt" "tmp"

查看完整的目录信息。


  1. # 查看当前目录权限
  2. > file.info(".")
  3. size isdir mode mtime ctime atime uid gid uname grname
  4. . 4096 TRUE 775 2013-11-14 08:40:46 2013-11-14 08:40:46 2013-11-14 08:41:57 1000 1000 conan conan
  5. # 查看指定目录权限
  6. > file.info("./tmp")
  7. size isdir mode mtime ctime atime uid gid uname grname
  8. ./tmp 4096 TRUE 775 2013-11-14 14:35:56 2013-11-14 14:35:56 2013-11-14 14:35:56 1000 1000 conan conan

2.2 创建目录


  1. # 在当前目录下,新建一个目录
  2. > dir.create("create")
  3. > list.dirs()
  4. [1] "." "./create" "./tmp"

创建一个3级子目录./a1/b2/c3


  1. # 直接创建,出错
  2. > dir.create(path="a1/b2/c3")
  3. Warning message:
  4. In dir.create(path = "a1/b2/c3") :
  5. cannot create dir 'a1/b2/c3', reason 'No such file or directory'
  6. # 递归创建,成功
  7. > dir.create(path="a1/b2/c3",recursive = TRUE)
  8. > list.dirs()
  9. [1] "." "./a1" "./a1/b2" "./a1/b2/c3" "./create" "./tmp"
  10. # 通过系统命令查看目录结构
  11. > system("tree")
  12. .
  13. ├── a1
  14.    └── b2
  15.    └── c3
  16. ├── create
  17. ├── readme.txt
  18. └── tmp

2.3 检查目录是否存在


  1. # 目录存在
  2. > file.exists(".")
  3. [1] TRUE
  4. > file.exists("./a1/b2")
  5. [1] TRUE
  6. # 目录不存在
  7. > file.exists("./aa")
  8. [1] FALSE

2.4 检查目录的权限

检查目录的权限


  1. > df<-dir(full.names = TRUE)
  2. # 检查文件或目录是否存在,mode=0
  3. > file.access(df, 0) == 0
  4. ./a1 ./create ./readme.txt ./tmp
  5. TRUE TRUE TRUE TRUE
  6. # 检查文件或目录是否可执行,mode=1,目录为可以执行
  7. > file.access(df, 1) == 0
  8. ./a1 ./create ./readme.txt ./tmp
  9. TRUE TRUE FALSE TRUE
  10. # 检查文件或目录是否可写,mode=2
  11. > file.access(df, 2) == 0
  12. ./a1 ./create ./readme.txt ./tmp
  13. TRUE TRUE TRUE TRUE
  14. # 检查文件或目录是否可读,mode=4
  15. > file.access(df, 4) == 0
  16. ./a1 ./create ./readme.txt ./tmp
  17. TRUE TRUE TRUE TRUE

修改目录权限。


  1. # 修改目录权限,所有用户只读
  2. > Sys.chmod("./create", mode = "0555", use_umask = TRUE)
  3. # 查看目录完整信息,mode=555
  4. > file.info("./create")
  5. size isdir mode mtime ctime atime uid gid uname grname
  6. ./create 4096 TRUE 555 2013-11-14 08:36:28 2013-11-14 09:07:05 2013-11-14 08:36:39 1000 1000 conan conan
  7. # create目录不可以写
  8. > file.access(df, 2) == 0
  9. ./a1 ./create ./readme.txt ./tmp
  10. TRUE FALSE TRUE TRUE

2.5 对目录重名


  1. # 对tmp目录重命名
  2. > file.rename("tmp", "tmp2")
  3. [1] TRUE
  4. # 查看目录
  5. > dir()
  6. [1] "a1" "create" "readme.txt" "tmp2"

2.6 删除目录


  1. # 删除tmp2目录
  2. > unlink("tmp2", recursive = TRUE)
  3. # 查看目录
  4. > dir()
  5. [1] "a1" "create" "readme.txt"

2.7 其他功能函数

拼接目录字符串


  1. # 拼接目录字符串
  2. > file.path("p1","p2","p3")
  3. [1] "p1/p2/p3"
  4. > dir(file.path("a1","b2"))
  5. [1] "c3"

获取最底层的子目录名


  1. # 当前目录
  2. > getwd()
  3. [1] "/home/conan/R/fs"
  4. # 最底层子目录
  5. > dirname("/home/conan/R/fs/readme.txt")
  6. [1] "/home/conan/R/fs"
  7. # 最底层子目录或文件名
  8. > basename(getwd())
  9. [1] "fs"
  10. > basename("/home/conan/R/fs/readme.txt")
  11. [1] "readme.txt"

转换文件扩展路径


  1. # 转换~为用户目录
  2. > path.expand("~/foo")
  3. [1] "/home/conan/foo"

标准化路径,用来转换win或linux的路径分隔符


  1. # linux
  2. > normalizePath(c(R.home(), tempdir()))
  3. [1] "/usr/lib/R" "/tmp/RtmpqNyjPD"
  4. # win
  5. > normalizePath(c(R.home(), tempdir()))
  6. [1] "C:\\Program Files\\R\\R-3.0.1"
  7. [2] "C:\\Users\\Administrator\\AppData\\Local\\Temp\\RtmpMtSnci"

短路径,缩减路径的显示长度,只在win中运行。


  1. # win
  2. > shortPathName(c(R.home(), tempdir()))
  3. [1] "C:\\PROGRA~1\\R\\R-30~1.1"
  4. [2] "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\RTMPMT~1"

3. 文件操作

3.1 查看文件


  1. > dir()
  2. [1] "create" "readme.txt"
  3. # 检查文件是否存在
  4. > file.exists("readme.txt")
  5. [1] TRUE
  6. # 文件不存在
  7. > file.exists("readme.txt222")
  8. [1] FALSE
  9. # 查看文件完整信息
  10. > file.info("readme.txt")
  11. size isdir mode mtime ctime atime uid gid uname grname
  12. readme.txt 7 FALSE 664 2013-11-14 08:24:50 2013-11-14 08:24:50 2013-11-14 08:24:50 1000 1000 conan conan
  13. # 查看文件访问权限,存在
  14. > file.access("readme.txt",0)
  15. readme.txt
  16. 0
  17. # 不可执行
  18. > file.access("readme.txt",1)
  19. readme.txt
  20. -1
  21. # 可写
  22. > file.access("readme.txt",2)
  23. readme.txt
  24. 0
  25. # 可读
  26. > file.access("readme.txt",4)
  27. readme.txt
  28. 0
  29. # 查看一个不存在的文件访问权限,不存在
  30. > file.access("readme.txt222")
  31. readme.txt222
  32. -1

判断是文件还是目录。


  1. # 判断是否是目录
  2. > file_test("-d", "readme.txt")
  3. [1] FALSE
  4. > file_test("-d", "create")
  5. [1] TRUE
  6. # 判断是否是文件
  7. > file_test("-f", "readme.txt")
  8. [1] TRUE
  9. > file_test("-f", "create")
  10. [1] FALSE

3.2 创建文件


  1. # 创建一个空文件 A.txt
  2. > file.create("A.txt")
  3. [1] TRUE
  4. # 创建一个有内容的文件 B.txt
  5. > cat("file B\n", file = "B.txt")
  6. > dir()
  7. [1] "A.txt" "B.txt" "create" "readme.txt"
  8. # 打印A.txt
  9. > readLines("A.txt")
  10. character(0)
  11. # 打印B.txt
  12. > readLines("B.txt")
  13. [1] "file B"

把文件B.txt的内容,合并到 A.txt。


  1. # 合并文件
  2. > file.append("A.txt", rep("B.txt", 10))
  3. [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
  4. # 查看文件内容
  5. > readLines("A.txt")
  6. [1] "file B" "file B" "file B" "file B" "file B" "file B" "file B" "file B" "file B" "file B"

把文件A.txt复制到文件C.txt


  1. # 复制文件
  2. > file.copy("A.txt", "C.txt")
  3. [1] TRUE
  4. # 查看文件内容
  5. > readLines("C.txt")
  6. [1] "file B" "file B" "file B" "file B" "file B" "file B" "file B" "file B" "file B" "file B"

3.3 修改文件权限


  1. # 修改文件权限,创建者可读可写可执行,其他人无权限
  2. > Sys.chmod("A.txt", mode = "0700", use_umask = TRUE)
  3. # 查看文件信息
  4. > file.info("A.txt")
  5. size isdir mode mtime ctime atime uid gid uname grname
  6. A.txt 70 FALSE 700 2013-11-14 12:55:18 2013-11-14 12:57:39 2013-11-14 12:55:26 1000 1000 conan conan

3.4 文件重命名


  1. # 给文件A.txt重命名为AA.txt
  2. > file.rename("A.txt","AA.txt")
  3. [1] TRUE
  4. > dir()
  5. [1] "AA.txt" "B.txt" "create" "C.txt" "readme.txt"

3.5 硬连接和软连接

  • 硬连接,指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
  • 软连接,也叫符号连接(Symbolic Link)。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

硬连接和软连接,只在Linux系统中使用。


  1. # 硬连接
  2. > file.link("readme.txt", "hard_link.txt")
  3. [1] TRUE
  4. # 软连接
  5. > file.symlink("readme.txt", "soft_link.txt")
  6. [1] TRUE
  7. # 查看文件目录
  8. > system("ls -l")
  9. -rwx------ 1 conan conan 70 Nov 14 12:55 AA.txt
  10. -rw-rw-r-- 1 conan conan 7 Nov 14 12:51 B.txt
  11. dr-xr-xr-x 2 conan conan 4096 Nov 14 08:36 create
  12. -rw-rw-r-- 1 conan conan 70 Nov 14 12:56 C.txt
  13. -rw-rw-r-- 2 conan conan 7 Nov 14 08:24 hard_link.txt
  14. -rw-rw-r-- 2 conan conan 7 Nov 14 08:24 readme.txt
  15. 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函数使用同删除目录操作是一样的。


  1. # 删除文件
  2. > file.remove("A.txt", "B.txt", "C.txt")
  3. [1] FALSE TRUE TRUE
  4. # 删除文件
  5. > unlink("readme.txt")
  6. # 查看目录文件
  7. > system("ls -l")
  8. total 12
  9. -rwx------ 1 conan conan 70 Nov 14 12:55 AA.txt
  10. dr-xr-xr-x 2 conan conan 4096 Nov 14 08:36 create
  11. -rw-rw-r-- 1 conan conan 7 Nov 14 08:24 hard_link.txt
  12. lrwxrwxrwx 1 conan conan 10 Nov 14 13:11 soft_link.txt -> readme.txt
  13. # 打印硬连接文件
  14. > readLines("hard_link.txt")
  15. [1] "file A"
  16. # 打印软连接文件,soft_link.txt,由于原文件被删除,有错误
  17. > readLines("soft_link.txt")
  18. Error in file(con, "r") : cannot open the connection
  19. In addition: Warning message:
  20. In file(con, "r") :
  21. cannot open file 'soft_link.txt': No such file or directory

4. 几个特殊的目录

  • R.home() 查看R软件的相关目录
  • .Library 查看R核心包的目录
  • .Library.site 查看R核心包的目录和root用户安装包目录
  • .libPaths() 查看R所有包的存放目录
  • system.file() 查看指定包所在的目录

4.1 R.home() 查看R软件的相关目录


  1. # 打印R软件安装目录
  2. > R.home()
  3. [1] "/usr/lib/R"
  4. # 打印R软件bin的目录
  5. > R.home(component="bin")
  6. [1] "/usr/lib/R/bin"
  7. # 打印R软件文件的目录
  8. > R.home(component="doc")
  9. [1] "/usr/share/R/doc"

通过系统命令,找到R文件的位置。


  1. # 检查系统中R文件的位置
  2. ~ whereis R
  3. 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
  4. # 打印环境变量R_HOME
  5. ~ echo $R_HOME
  6. /usr/lib/R

通过R.home()函数,我们可以很容易的定位R软件的目录。

4.2 R软件的包目录


  1. # 打印核心包的目录
  2. > .Library
  3. [1] "/usr/lib/R/library"
  4. # 打印核心包的目录和root用户安装包目录
  5. > .Library.site
  6. [1] "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"
  7. [3] "/usr/lib/R/library"
  8. # 打印所有包的存放目录
  9. > .libPaths()
  10. [1] "/home/conan/R/x86_64-pc-linux-gnu-library/3.0"
  11. [2] "/usr/local/lib/R/site-library"
  12. [3] "/usr/lib/R/site-library"
  13. [4] "/usr/lib/R/library"

4.3 查看指定包所在的目录


  1. # base包的存放目录
  2. > system.file()
  3. [1] "/usr/lib/R/library/base"
  4. # pryr包的存放目录
  5. > system.file(package = "pryr")
  6. [1] "/home/conan/R/x86_64-pc-linux-gnu-library/3.0/pryr"

REF:

http://blog.fens.me/r-file-folder/

R语言文件相关的操作的更多相关文章

  1. R语言︱文件读入、读出一些方法罗列(批量xlsx文件、数据库、文本txt、文件夹)

    笔者寄语:小规模的读取数据的方法较为简单并且多样,但是,批量读取目前看到有以下几种方法:xlsx包.RODBC包.批量转化成csv后读入. R语言中还有一些其他较为普遍的读入,比如代码包,R文件,工作 ...

  2. PHP文件相关的操作函数——目录操作

    1.有关文件类型的函数 PHP是以UNIX的文件系统为模型的,因此在Windows系统中我们只能获得“file”.“dir”或者“unknown”三种文件类型.而在UNIX系统中,我们可以获得“blo ...

  3. Head First Python-Python中与文件相关的操作-读、处理、写

    最近在看head first python,前面也写了一些笔记,但是基本上没有涉及到一些完整的代码,现在将书中的文件相关操作的代码整理,供以后参考. 主要分为两大部分,读取文件.处理异常,处理文件.存 ...

  4. R 语言的Dataframe常用操作

    上节我们简单介绍了Dataframe的定义,这节我们具体来看一下Dataframe的操作 首先,数据框的创建函数为 data.frame( ),参考R语言的帮助文档,我们来了解一下data.frame ...

  5. R语言dataframe的常用操作总结

    前言:近段时间学习R语言用到最多的数据格式就是data.frame,现对data.frame常用操作进行总结,其中函数大部分来自dplyr包,该包由Hadley Wickham所作,主要用于数据的清洗 ...

  6. R语言常用的矩阵操作

    R语言是一门非常方便的数据分析语言,它内置了许多处理矩阵的方法.下面列出一些常用的矩阵操作方法示例. 矩阵的生成 > mat <- matrix(:, ncol = , nrow = , ...

  7. R语言 入门知识--常用操作和例子

    1 R的下载.安转   (转)R有很多的版本,支持目前主流的操作系统MAC.Linux和WINDOWS系列.因为我个人是在WINDOWS下用R的,所以在这里将只介绍WINDOWS下R的下载&安 ...

  8. PHP文件相关的操作函数——文件操作

    1.文件的代开与关闭 1.1 fopen() 作用:该函数用于打开一个文件 具体使用访问:http://www.w3school.com.cn/php/func_filesystem_fopen.as ...

  9. C语言 文件的读写操作

    //凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ #include<stdio.h> #include<stdlib.h> void ...

随机推荐

  1. Wireshark数据抓包分析——网络协议篇

                   Wireshark数据抓包分析--网络协议篇     watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...

  2. macbook安装homebrew并更换清华源

    1.官网brew.sh复制安装脚本. 2.自动安装完成后,更换为清华源来加快速度.网址为:https://mirrors.tuna.tsinghua.edu.cn/help/homebrew 3.更换 ...

  3. Spring、SpringMVC和Springboot的区别(网摘)

    spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc. spring mvc 是只是spring 处理web层请求的一个模 ...

  4. IP地址格式转换(htonl、ntohl;inet_addr、inet_ntoa)

    名词解析: 主机字节序: 不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序,这个叫做主机序.最常见的有两种 1.Little endian:低字节存高地址,高字节存低地址 2.Bi ...

  5. 阿里druid连接池监控配置

    首先在web.xml中添加如下配置: <filter> <filter-name>DruidWebStatFilter</filter-name> <filt ...

  6. c++11并发机制

    传统意义上OS提供的并发机制包含进程和线程两个级别.考虑到实际复杂性,c++11仅提供了线程并发机制. c++11提供的线程并发机制主要位于四个头文件中:..... 线程并发机制包括线程管理.原子操作 ...

  7. debian下创建新用户useradd

    1.使用sudo: sudo useradd -m abc -g sudo -s /bin/bash -d /home/abc sudo passwd abc 2.直接在root用户下: groupa ...

  8. 【机器学习】K近邻算法——多分类问题

    给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该类输入实例分为这个类. KNN是通过测量不同特征值之间的距离进行分类.它的的思路是:如 ...

  9. Android开发(三十)——ScrollView中ListView的高度自动适应

    int totalHeight = 0; for (int i = 0; i < mStrings.length; i++) { //pullList ListView //mAdapter A ...

  10. JAVA-数据库之JDBC连接MySQL数据库

    相关资料:<21天学通Java Web开发> JDBC连接MySQL数据库1.如果需要通过JDBC来连接MySQL数据库,还必须先在MySQL数据库服务器中创建数据库和表. Connect ...