我有一个位于here的rstudio插件包。
其中一个插件允许用户定义一个目录,它会将位于包中的文件复制到该目录。
该文件位于:
atProjectManageAddins/inst/Docs/RMarkdownSkeleton.Rmd
我正在尝试将其复制到用户定义的目录中,如下所示:
file.copy("inst/Docs/RMarkdownSkeleton.Rmd",
paste0(Dir, FolderName, "/Reports/", FolderName, "_report.Rmd"))
我试图将其从包中的位置复制到用户定义的位置(基于两个单独的参数Dir
和FolderName
)。
但这似乎不起作用。我的假设是我没有以正确的方式引用包目录。我已经尝试了./Inst/
,~/Inst/
,还有更多。我现在的假设是,有一个更系统的原因导致我无法让file.copy()
工作。
有什么建议吗?这甚至可能吗?
请注意,如果我通过source()
和runGadget()
在本地运行该功能,则可以正常运行。只有在安装软件包并且我使用RStudio addins GUI引用它的软件包时,它才会失败。因此,我非常确定我没有正确定义已安装的.Rmd
文件的文件路径。
编辑:根据Carl的建议(在github上可以看到),我已更改为以下内容,但文件仍未被复制。
file.copy(system.file("Docs","Rmarkdownskeleton.rmd",package="atProjectManageAddins"),
paste0(Dir, FolderName, "/Reports/", FolderName, "_report.Rmd"))
答案 0 :(得分:4)
system.file
是从包中获取文件的最佳函数。我相信这对你有用:
file.copy(system.file("Docs","Rmarkdownskeleton.rmd",package="atProjectManageAddins"),
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")))