我正在使用RStudio编织一个.Rnw
文件。 pdf
。此.Rnw
文件存储在git版本控制下的目录中。该目录还包含该项目的.RProj
文件。如何避免硬编码文件路径?
我与不了解.Rnw
文件和git的第一件事的同事合作。这些同事想要打开一个Word文件并跟踪改变他们的心。所以我给了他们想要的东西。
每个人都需要访问权限,因此将Word文件存储在像Box这样的云服务上很有意义。在过去,我在我的回购库中创建了一个子文件夹,用于共享 - 将所有内容都保存在根目录中 - 但是这次我需要将文件存储在其他人创建的共享文件夹中。所以我的解决方案是将这个共享目录中的Word文件复制到我的存储库中。
技术途径
我不知道如何使这个可重复的问题,但我希望你能给我一定的自由度,因为我试图让我的工作完全可重复;)
假设我的.Rnw
文件存储在repoRoot/subfolder
中。由于knitr
将工作目录更改为subfolder
,其中此.Rnw
文件所在的位置,第一个块将root.dir
设置在项目根目录的上一级。
<<knitr, include=FALSE>>=
library(knitr)
opts_knit$set(root.dir=normalizePath('../')) # go up 1 level
@
下一个块将Word文件从共享文件夹复制到我的git仓库并运行分析文件。 共享目录路径硬编码到我的机器,这是我写的帮助解决的问题。
file.copy(from='/Users/ericpgreen/Box Sync/Project/Paper/draft.docx',
to='subfolder/draft.docx', # my repo
overwrite=TRUE)
source(scripts/analysis.R) # generates objects we reference in the .docx file
加入\begin{document}
后,我包括一大块,我的.docx
文件转换为.txt
,然后将其重命名为.Rnw
。
# convert docx to txt
system("textutil -convert txt 'subfolder/draft.docx'")
# rename txt to .Rnw
file.rename('subfolder/draft.txt',
'subfolder/draft.Rnw')
下一个子块调用这个.Rnw
文件,其中包含与于R对象的引用Word文件的文本通过\Sexpr{}
包括:
<<include-draft, child='draft.Rnw', include=FALSE>>=
@
这只是正常的我。每当我编织.Rnw
文件时,它抓住我的同事已编辑过的.docx
文件的最新版本(完成了音轨更改和评论),并在稍后未示出的步骤中将.pdf
文件返回到共享文件夹。
解决的问题
此设置满足几乎所有需要我,除了初始file.copy()
命令是硬编码到我的机器。因此,如果我的团队中的某个人克隆了我的回购(例如,使用版本控制的研究助理),它将不会用完。在这种情况下是否有硬编码的解决方法?
使用'tempdir()'和'tempfile()'并要求用户从临时目录复制内容。如果你想要一个特定的目录作为临时目录,'tempfile()'中的'tmpdir'参数允许你控制位置。 – Sathish