我希望获得R中文件的完全限定名称,给出任何标准符号。例如:
path.expand
)完全限定文件名是指,例如,(在类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脚本或类似的),但我可以'找到任何直接的方法,而不是“从头开始”编码。
有什么想法吗?
答案 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)
我想我有点想念您的问题,但希望我的回答可以指出您想要的方向(它将您使用paste
和getwd
与list.files
的想法结合起来}):
paste(getwd(),substr(list.files(full.names = TRUE), 2,1000), sep ="")
编辑:在某些经过测试的文件夹中使用Windows。