我正在使用RStudio将一个.Rnw文件转换为.pdf文件。这个.Rnw文件存储在一个受git版本控制的目录下。该目录还包含一个.RProj项目文件。
我与不懂.Rnw文件和git的同事合作。这些同事想要打开一个Word文件并进行更改跟踪。所以我给了他们想要的东西。
每个人都需要访问,因此将Word文件存储在Box等云服务中是有意义的。过去我在共享的repo中创建了一个子文件夹,将所有内容保留在根目录中,但这一次我需要将文件存储在其他人创建的共享文件夹中。因此,我的解决方案是将Word文件从此共享目录复制到我的repo中。
技术方法:
我不知道如何使这成为可复制的问题,但希望您会给我一些宽限,因为我正在努力使我的工作完全可复制 ;)
假设我的.Rnw文件存储在repoRoot/subfolder中。由于knitr将工作目录更改为存储该.Rnw文件的subfolder,在第一个代码块中,将root.dir设置为项目根目录的上一级。
下一块代码将Word文件从共享文件夹复制到我的git仓库并运行分析文件。共享目录路径是硬编码到我的机器上的,这就是我请求您帮助解决的问题。
在添加
下一个子块调用这个包含对R对象的引用通过\Sexpr{}的Word文件文本的.Rnw文件:
我与不懂.Rnw文件和git的同事合作。这些同事想要打开一个Word文件并进行更改跟踪。所以我给了他们想要的东西。
每个人都需要访问,因此将Word文件存储在Box等云服务中是有意义的。过去我在共享的repo中创建了一个子文件夹,将所有内容保留在根目录中,但这一次我需要将文件存储在其他人创建的共享文件夹中。因此,我的解决方案是将Word文件从此共享目录复制到我的repo中。
技术方法:
我不知道如何使这成为可复制的问题,但希望您会给我一些宽限,因为我正在努力使我的工作完全可复制 ;)
假设我的.Rnw文件存储在repoRoot/subfolder中。由于knitr将工作目录更改为存储该.Rnw文件的subfolder,在第一个代码块中,将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')
下一个子块调用这个包含对R对象的引用通过\Sexpr{}的Word文件文本的.Rnw文件:
<<include-draft, child='draft.Rnw', include=FALSE>>=
@
这对我来说很有效。每当我编织.Rnw
文件时,它会获取我的同事编辑的最新版本的.docx
文件(包括修订和注释),然后在此处未显示的后续步骤中将.pdf
文件返回到共享文件夹。
需要解决的问题
这个设置几乎满足了我所有的需求,但是初始的file.copy()
命令是硬编码到我的机器上的。因此,如果我的组中的某个人克隆了我的repo(例如,使用版本控制的研究助理),它就不能直接运行。在这种情况下,是否有一种解决方法可以避免硬编码?
tempdir()
和tempfile()
并要求用户从临时目录中复制内容。如果您想要一个特定的目录作为您的临时目录,tempfile()
中的tmpdir
参数允许您控制位置。 - Sathish