sourced或Sweaved文件如何找到自己的路径?
背景:
我使用.R脚本或.Rnw文件工作了很多.我的项目是在一个目录结构中组织的,但是项目基本目录的路径经常在不同的计算机之间变化(例如,因为我只为其他人做了部分数据分析,他们的目录结构与我的不同:我有项目基目录〜/ Projects/StudentName /或〜/ Projects/Studentname/Projectname和大多数只拥有一个项目的学生通常在〜/ Measurements /或〜/ DataAnalysis /或类似的东西下 - 这对我不起作用).
所以像一条线
    setwd (my.own.path ()) 
将是非常有用的,因为它将允许确保工作目录是项目的基本路径,无论该项目实际在哪里.无需用户必须考虑设置工作目录.
让我澄清一下:我寻找的解决方案可以按下不假思索的用户的编辑器/ IDE source或Sweave键盘快捷键.
Yih*_*Xie 12
仅供参考,knitr将setwd()在(并且仅在)评估代码块时输入文件的目录,即如果您调用knit('path/to/input.Rnw'),则工作目录将暂时切换到path/to/.如果你想知道代码块中的输入目录,目前你可以调用一个未导出的函数knitr:::input_dir()(我将来可以导出它).
cbe*_*ica 11
从gsk3的Seb的建议开始,这是一个想法:
这导致类似于:
    setwd (switch (paste (Sys.info () [c ("user", "nodename")], collapse="."), 
           user.laptop  = "~/Messungen",
           user2.server = "~/Projekte/Projekt/",
           ))
所以有一个自动解决方案
sourceSweave甚至适用于逐行发送命令的交互式会话
的组合user和nodename当然需要是特定
欢迎改进!
更新:
Gabor Grothendieck今天就r-help的相关问题回答了以下问题:
this.dir <- dirname(parent.frame(2)$ofile)
setwd(this.dir)
这将适用于source.
另一个更新:我现在在RStudio中进行大部分数据分析工作.RStudio的项目基本上解决了这个问题:每次在项目之间切换时,RStudio都会将工作目录更改为项目根目录.
因此,我可以将项目目录放在我想要的目录树中(并且学生也可以将他们的副本放在他们想要的任何地方)并.Rnw通过版本控制同步数据文件和脚本(我们使用私有git服务器).RStudio项目文件不受版本控制,即.gitignore 包含.Rproj.user.
显然,在项目中,需要同步目录结构.