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