我在一个包中编写了一个函数,它将获取用户提供的一些数据,并用这些数据的图形创建一个相当小的Word文档.然而,当工作目录是本地驱动器时,该功能工作得很好,但当驱动器是其他驱动器时,它会失败.错误包括:

png中退出第6-9行(skeleton.Rmd)错误(…,res=dpi,

一般来说,我确实有权限写入我当前的工作目录.事实上,当我在同一个包中调用一个类似的函数来生成一个表而不是一个图时,它工作得很好.

I think发生的事情是,Rmarkdown或knitr需要临时保存图形的png文件,以便将其放置在Word文件中,而它正在将其保存在没有权限的地方.Can I get around this behavior by specifying something with rmarkdown::render?

当我引用多个文件和包的文件 struct 时,我不知道如何准确地创建一个可复制的示例,但下面是我在需要什么信息方面的最佳try .下面是函数的一个示例:

 myFun <- function(mydata, filename){
    G <- ggplot2::ggplot(mydata, ggplot2::aes(x = A, y = B)) + 
       ggplot2::geom_point()
         
    OutPath <- dirname(filename)
    FileName <- basename(filename)
        
    rmarkdown::render(system.file("rmarkdown/templates/myplot/skeleton/skeleton.Rmd", 
       package="mypackage"), output_dir = OutPath,
       output_file = FileName, quiet = TRUE)
 }
 

要获取骨架的文件 struct .我的套餐顶层Rmd:

实际的Rmarkdown 文档如下所示:

---
title: "My Plot"
output: word_document
---

```{r}
G
```

错误消息"退出第6-9行"指的是输出G的块.

要调用此选项,请使用:

 myFun(mydata = data.frame(A = 1:10, B = 1:10),
       filename = "my file.docx")
 

如果它正常工作,您将在当前工作目录中得到一个名为"my file.docx"的Word文件,其中包含一个图形.

Is there some way to work around rmarkdown's need to temporarily save this png file? Can I set the directory for this temporary file to something else where it 101 have write permissions?

推荐答案

一种可能的解决方法是在临时目录中呈现标记,并将生成的文件复制到其目标see:

myFun <- function(mydata, filename){
  G <- ggplot2::ggplot(mydata, ggplot2::aes(x = A, y = B)) + 
    ggplot2::geom_point()
  
  tmpdir <- tempdir()
  on.exit(unlink(tmpdir))
  
  OutPath <- dirname(filename)
  FileName <- basename(filename)
  
  rmarkdown::render(system.file("rmarkdown/templates/myplot/skeleton/skeleton.Rmd", 
                                package="mypackage"), output_dir = tmpdir,
                    output_file = FileName, quiet = TRUE)
  file.copy(file.path(tmpdir,FileName,OutPath, overwrite = T))
  
}

R相关问答推荐

是否有R代码来判断一个组中的所有值是否与另一个组中的所有值相同?

是否有R函数来判断一个组中的所有值是否与另一个组中的所有值相同?

有没有方法将paste 0功能与列表结合起来?

使用scale_x_continuous复制ggplot 2中的离散x轴

使用sensemakr和fixest feols模型(R)

如何在四进制仪表板值框中显示值(使用shiny 的服务器计算)

以R为基数排列奇数个图

具有多个依赖变量/LHS的逻辑模型

自动变更列表

在R中使用数据集名称

如何对2个列表元素的所有组合进行操作?

LOF中的插图短文字幕

如何在ggplot2中绘制具有特定 colored颜色 的连续色轮

在R函数中使用加号

将选定的索引范围与阈值进行比较

如何预测原始数据集并将值添加到原始数据集中

有毒元素与表观遗传年龄的回归模型

在使用SliderInput In Shiny(R)设置输入数据的子集时,保留一些情节痕迹

对一个数据帧中另一个数据帧中的值进行计数

如何根据每个子框架中分类因子的唯一计数来过滤子框架列表?