当目录路径中有一些重音字符时,如何使用knitr?

当目录路径中有一些重音字符时,如何使用knitr?,r,path,knitr,non-ascii-characters,R,Path,Knitr,Non Ascii Characters,我正在R中编写一个函数,它允许为R内存中的任何列表生成html报告。该功能依赖于knitr。 此功能在以下位置可用: 除非工作目录的路径包含特殊字符(例如,重音字符),否则该函数工作得很好。 换句话说,如果路径为: C:\Users\Nicolas 一切都好。但是,如果路径为: C:\Users\Véro knitr无法更改目录。 我发现knitr的作者。但是,由于我想分享这个函数,我无法确保其他人不使用非ascii字符。 我试图通过测试路径是否包含非ascii字符来避免这个问题,并在至少有一个

我正在R中编写一个函数,它允许为R内存中的任何列表生成html报告。该功能依赖于knitr。 此功能在以下位置可用: 除非工作目录的路径包含特殊字符(例如,重音字符),否则该函数工作得很好。 换句话说,如果路径为:

C:\Users\Nicolas

一切都好。但是,如果路径为:

C:\Users\Véro

knitr无法更改目录。 我发现knitr的作者。但是,由于我想分享这个函数,我无法确保其他人不使用非ascii字符。 我试图通过测试路径是否包含非ascii字符来避免这个问题,并在至少有一个ascii字符时创建一个新目录

wd<-getwd()

 if(grepl("[^[:alnum:]]", wd)) {
   wd.decomp<-str_split(wd, "/")
   special.chr<-grepl("[^[:alnum:]]",unlist(wd.decomp) )
   special.chr<-which(special.chr)[2]
   special.chr<-special.chr-1
   wd.decomp<-unlist(wd.decomp)
   new.wd<-wd.decomp[1:special.chr]
   new.wd.<-str_flatten(new.wd, "/")
   new.wd.<-paste0(new.wd., "/res.easieR")
   dir.create( new.wd., showWarnings = FALSE)
   test<-try(setwd(new.wd.))
  if(class(test)== "try-error"){
     new.wd.<-str_flatten(new.wd, '\\')   
     new.wd.<-paste0(new.wd., "\\res.easieR")
     dir.create( new.wd., showWarnings = FALSE)
     setwd( new.wd.)
    }

wdR有tempdir(),如果文件是临时文件,您可以使用它来编写文件。因此,您可以使用
paste0(tempdir(),“\”,“easer.res”)
。没有必要一直切换wd,而是使用完整路径。非常感谢。我的问题似乎已经解决了(至少在我做的测试中是这样)。我认为@Elin是正确的,如果您想创建一个具有有效路径的新目录,那么
tempdir()
就是一种方法。但是,我建议根本不要(悄悄地)更改目录:非常、非常经常出现问题,因为用户不知道他们当前的目录(例如,在尝试读取数据时)。添加一个额外的模糊层可能不会有帮助…我的建议:退出时显示一条清晰的错误消息,并要求用户移动到一个有效的目录。感谢您的建议,但这并不总是可能的,尤其是当用户姓名中有重音字符,并且他们没有计算机管理员权限时(例如,在教室中,学生只能进入他们的文件夹,但甚至无权更改自己文件夹的名称)。简而言之,我现在使用的是Elin提出的解决方案,但对于名字中带有重音字符的人来说,这个问题还没有完全解决