在R语言中关于目录的问题小结

在敲了很多R脚本,然后需要互相引用的时候就会遇到路径问题了 1、如果获取当前工作目录使用: getwd() 2、获取R 包安装目录使用: .libPaths()[1] 3、获取R脚本当前目录咋整? 这个问题其...

在敲了很多R脚本,然后需要互相引用的时候就会遇到路径问题了

1、如果获取当前工作目录使用:

getwd()

attachments-2017-09-vckNjUPo59cf3f0eeda42、获取R 包安装目录使用:

.libPaths()[1]

attachments-2017-09-k1inBhrP59cf3f5fd5083、获取R脚本当前目录咋整?

这个问题其实是比较坑的,笔者就遇到过这样的问题,场景是这样的有个公共的R脚本,其他脚本都要source它,然而这个脚本和其他项目放在同一目录下,因为这些脚本是封装好了的,直接用命令行调用比如Rscript, 那么问题来了,怎么在脚本中source这个公共的脚本呢,如果直接写绝对路径,那么当你把这些脚本换个目录时全部修改一下路径?当脚本有一百多个的时候你修改一下看看。

R里面没有直接获取当前脚本的目录,笔者苦思冥想想到一个办法是这样的:

source(paste0(gsub('library$','',.libPaths()[1]),'/common.r'))

从这句话里可以看出将公共的脚本丢到R 包安装目录里,然后统一source,问题解决了!!!

然后过了一两月,要将这个流程移植到另外一台服务器上,我们的程序猿搞了一天怎么都没有配置成功,后来灵机一动想起来了common.r没有和项目一起打包过去。。。。。。。。。。。

痛定思痛,决定要改掉这种操作!!!!!

最后发现在命令行调用R脚本时可以是可以获取到当前脚本的:

比如:Rscript D:/AAA/test.R

Args <- commandArgs()

print(Args[4])

#--file=D:/AAA/test.R

substr(Args[4],8,nchar(Args[4]))

#D:/AAA/test.R

得到了当前运行脚本的路径!

问题又来了,如何得到D:/AAA这个目录呢?

R里面对于斜杠操作简直不方便,尤其是这个目录可能很长,可能很短,然后linux和Windows系统斜杠还不一样,用字符串操作显然不行啊

小技巧来了:

R里面提供了一个函数dirname,这个不常用的函数解决了这个复杂的问题

最终我们的代码换成了这个:

source(paste0(dirname(substr(Args[4],8,nchar(Args[4]))),'/common.r'))

程序猿大哥终于可以按时下班了!



  • 发表于 2017-09-30 15:13
  • 阅读 ( 3562 )
  • 分类:软件工具

0 条评论

请先 登录 后评论
不写代码的码农
祝让飞

生物信息工程师

118 篇文章

作家榜 »

  1. 祝让飞 118 文章
  2. 柚子 91 文章
  3. 刘永鑫 64 文章
  4. admin 57 文章
  5. 生信分析流 55 文章
  6. SXR 44 文章
  7. 张海伦 31 文章
  8. 爽儿 25 文章