Джеймс справедливо указывает, что в большинстве случаев каталог будет интерпретирован правильно.Если это вас не устраивает и предполагается, что ваш пользователь знает, что он или она не должны использовать обратную косую черту в своем каталоге, вы можете использовать file.path()
для решения вашей проблемы, например, так:
makepath <- function(path,file){
path <- as.list(strsplit(path,'/')[[1]])
do.call(file.path,c(path,file))
}
Есливаш пользователь может использовать обратную косую черту в Windows (и забыть, что он должен избегать их с другой обратной косой чертой), вы можете добавить следующие элементы управления:
makepath <- function(path,file){
if(grepl('[^[:graph:]]',path))
stop("Invalid characters. Check you didn't use a single \\")
win <- grepl('\\\\',path)
sep <- if(win) '\\\\' else '/'
path <- as.list(strsplit(path,sep)[[1]])
do.call(file.path,c(path,file))
}
Это дает:
> makepath('c:\\temp','myfile')
[1] "c:/temp/myfile"
> makepath('c:\\temp\\','myfile')
[1] "c:/temp/myfile"
> makepath('c:/temp','myfile')
[1] "c:/temp/myfile"
> makepath('c:/temp/','myfile')
[1] "c:/temp/myfile"