将Rstudio插件包中包含的.rmd文件复制到用户定义的目录中

时间:2016-07-28 16:58:19

标签: r r-package file-copying

我有一个位于here的rstudio插件包。

其中一个插件允许用户定义一个目录,它会将位于包中的文件复制到该目录。

该文件位于:

atProjectManageAddins/inst/Docs/RMarkdownSkeleton.Rmd

我正在尝试将其复制到用户定义的目录中,如下所示:

 file.copy("inst/Docs/RMarkdownSkeleton.Rmd", 
           paste0(Dir, FolderName, "/Reports/", FolderName, "_report.Rmd"))

我试图将其从包中的位置复制到用户定义的位置(基于两个单独的参数DirFolderName)。

但这似乎不起作用。我的假设是我没有以正确的方式引用包目录。我已经尝试了./Inst/~/Inst/,还有更多。我现在的假设是,有一个更系统的原因导致我无法让file.copy()工作。

有什么建议吗?这甚至可能吗?

请注意,如果我通过source()runGadget()在本地运行该功能,则可以正常运行。只有在安装软件包并且我使用RStudio addins GUI引用它的软件包时,它才会失败。因此,我非常确定我没有正确定义已安装的.Rmd文件的文件路径。

编辑:根据Carl的建议(在github上可以看到),我已更改为以下内容,但文件仍未被复制。

file.copy(system.file("Docs","Rmarkdownskeleton.rmd",package="atProjectManageAd‌​dins"),
 paste0(Dir, FolderName, "/Reports/", FolderName, "_report.Rmd"))

2 个答案:

答案 0 :(得分:4)

system.file是从包中获取文件的最佳函数。我相信这对你有用:

file.copy(system.file("Docs","Rmarkdownskeleton.rmd",package="atProjectManageAd‌​dins"),
paste0(Dir, FolderName, "/Reports/", FolderName, "_report.Rmd"))

答案 1 :(得分:0)

您有正确的想法将文件放在inst/

使用此代码将文件从包目录复制到当前目录:

file.copy(from = file.path(path.package("packagename"), "path/to/file"),
      to = file.path("path/to/file"), overwrite = T)

file.path通过连接传递给它的字符串来创建路径(自动添加特定于OS的分隔符)。
path.package检索已加载包的路径。 inst/中显示的文件在安装时会复制到软件包目录的根目录,因此" path / to / file"这里应该是相对于inst/目录的路径 如果文件已经存在,overwrite可用于覆盖该文件。

在您的具体情况下,这应该可以解决问题:

file.copy(file.path(path.package("atProjectManageAddins"), "Docs/RMarkdownSkeleton.Rmd", 
          file.path(getwd(), "Reports", paste0(reportName, "_report.Rmd")))