R中的完全限定文件名

时间:2011-04-19 16:21:06

标签: r filenames

我希望获得R中文件的完全限定名称,给出任何标准符号。例如:

  • file.ext
  • 〜/ file.ext(此案例可以由path.expand
  • 处理
  • ../ current_dir / file.ext

完全限定文件名是指,例如,(在类Unix系统上):

  

/home/user/some/path/file.ext

(已编辑 - 使用file.path并尝试Windows支持)粗略的实施可能是:

path.qualify <- function(path) {
  path <- path.expand(path)
  if(!grepl("^/|([A-Z|a-z]:)", path)) path <- file.path(getwd(),path)
  path
}

但是,我理想地喜欢跨平台的东西可以处理../,符号链接等的相对路径。一个只有R的解决方案是首选的(而不是shell脚本或类似的),但我可以'找到任何直接的方法,而不是“从头开始”编码。

有什么想法吗?

2 个答案:

答案 0 :(得分:10)

我想你想要normalizePath()

> setwd("~/tmp/bar")
> normalizePath("../tmp.R")
[1] "/home/gavin/tmp/tmp.R"
> normalizePath("~/tmp/tmp.R")
[1] "/home/gavin/tmp/tmp.R"
> normalizePath("./foo.R")
[1] "/home/gavin/tmp/bar/foo.R"

对于Windows,有一个参数winslash,您可能希望一直设置它,因为除了Windows之外的任何其他内容都会被忽略,因此不会影响其他操作系统:

> normalizePath("./foo.R", winslash="\\")
[1] "/home/gavin/tmp/bar/foo.R"

(您需要转义\因此\\)或

> normalizePath("./foo.R", winslash="/")
[1] "/home/gavin/tmp/bar/foo.R"

取决于您希望路径的显示/使用方式。前者是默认值("\\"),因此如果足够,您可以坚持使用,而无需明确设置任何内容。

在R 2.13.0上,"~/file.ext"位也有效(见注释):

> normalizePath("~/foo.R")
[1] "/home/gavin/foo.R"

答案 1 :(得分:2)

我想我有点想念您的问题,但希望我的回答可以指出您想要的方向(它将您使用pastegetwdlist.files的想法结合起来}):

paste(getwd(),substr(list.files(full.names = TRUE), 2,1000), sep ="")

编辑:在某些经过测试的文件夹中使用Windows。