2

我有大约 10,000 张 png 图像整齐地保存在我 PC 上的不同文件中。我想编写一个函数,该函数执行诸如转到特定文件夹并迭代地将该文件夹中的所有 png 文件复制粘贴到 word 文档的功能。这在R中可能吗?

我看过包R2wd,但遗憾的是它只有一个函数,它接受 RData 并将其绘图输出到 word 文档(函数wdPlot)。

我还为每个绘图保存了 RData,因此我应该能够简单地加载与特定绘图关联的 RData,然后使用wdPlot. 问题是,当我生成我的 png 时,情节是 grobs,我做了如下的事情:

png("rp.png",width=w,height=h)
plot(rp)
#Increase size of title
grid.edit(gridTitle_Ref, gp=gpar(fontsize=20))
#Other grid.edit alterations
dev.off()
save(rp)

现在,当我尝试通过首先将 rp 加载到 RI 中天真地执行以下操作来将该 rp 放到 word 文档中时,它不会将标题放大或任何其他grid.edit更改的图输出到 MS Word。

load("rp.Rdata")    
png("rp.png",width=w,height=h)
wdPlot(rp) 
#Increase size of title 
grid.edit(gridTitle_Ref, gp=gpar(fontsize=20))
#Other grid.edit alterations
dev.off()

所以,重申一下:我有所有这些 png 文件。在不同的时候,我必须将它们的一个子集复制粘贴到一个 word 文档中。我懒得每次都手动做,想要一个程序为我做。

编辑 1

所以,根据下面的建议,我已经阅读了 Markdown。在这篇文章之后如何使用 knitr 为降价设置本地图像的大小? 我写了一些类似的东西:

```{r,echo=FALSE,fig.width=100, fig.height=100}
# Generate word documents of reports
# Clear all
rm(list=ls())
library(png)
library(grid)
library(knitr)

dir<-"location\of\file"
setwd(dir)

# Output only directories:
folders<-dir()[file.info(dir())$isdir]

for(folder in folders){ 
  currentDir<-paste(dir,folder,"\\",sep="")
  setwd(currentDir)

  #All files in current folder
  files<-list.files()

  imgs<-[A list of all the png images in this particular file that I want in the word document - the png names]

  for(img in imgs){   
    imgRaster<-readPNG(img) 
    grid.raster(imgRaster)
    }
 } 

```

以下是生成的 Word 文档中的内容的屏幕截图。我该如何解决这个问题?当上面的 for 循环运行时,我希望图像一个接一个地出现在文档中。

在此处输入图像描述

请注意,这是我第一次使用 Markdown,因此评论中链接的任何相关教程也可能会有很大帮助。

编辑 2 我遵循了下面第二个答案的示例。这是我获得的输出 在此处输入图像描述 在此处输入图像描述

如您所见,没有图像,只有 html 标签。我该如何解决?

4

2 回答 2

3

如果您png保存了 's,您可以使用一点点html和一个for循环将它们保存到.doc文件中。

编辑 2 for windows

# Start empty word doc
cat("<body>", file="exOut.doc", sep="\n")

 # select all png files in working directory
for(i in list.files(pattern="*.png"))
         {
         temp <- paste('<img src=', i, '>')
         cat(temp, file="exOut.doc", sep="\n", append=TRUE)  
         }

cat("</body>", file="exOut.doc", sep="\n", append=TRUE)

# Some example plots
for(i in 1:5) 
      { 
      png(paste0("ex", i, ".png"))
      plot(1:5)
      title(paste("plot", i))
      dev.off()
      }


# Start empty word doc
cat(file="exOut.doc")

# select all png files in working directory
for(i in list.files(pattern="*.png")) 
             {
             temp <- paste('<img src=', i, '>')
             cat(temp, file="exOut.doc", sep="\n", append=TRUE)   
             }

然后,您需要使用下拉菜单或编写一个可以调用的小宏来嵌入图形system


编辑:小更新以显示输出和数字的显式路径

cat("<body>", file="/home/daff/Desktop/exOut.doc", sep="\n")

for(i in list.files(pattern="*.png")) 
{
  temp <- paste0('<img src=/home/daff/', i, '>')
  cat(temp, file="/home/daff/Desktop/exOut.doc", sep="\n", append=TRUE)   
}

请注意,我曾经paste0删除路径/home/daff/ex*.png.

于 2014-11-25T01:55:47.910 回答
2

你试过 Rstudio 和 Markdown 吗?您可以将代码放入加载文件并保存为 word 文档的块中。http://rmarkdown.rstudio.com/word_document_format.html

于 2014-11-25T00:59:10.533 回答