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

Copy .rmd file included in a Rstudio addin package to a user defined directory

我有一个位于 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 插件 GUI 时它引用了已安装的包,它才会失败。因此,我很确定我没有正确定义已安装 .Rmd 文件的文件路径。

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

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

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

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

你把文件放在 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 检索 loaded 包的路径。 inst/ 中的文件在安装时被复制到包目录的根目录,因此这里的 "path/to/file" 应该是相对于你的 inst/ 目录的路径。
overwrite 可用于覆盖已存在的文件。

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

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