Как можно скопировать и вставить локальные файлы png в текстовый документ с помощью R?

У меня есть ~ 10 000 изображений PNG, аккуратно сохраненных в разных файлах на моем ПК. Я хочу написать функцию, которая делает что-то вроде перехода в определенную папку и многократно копирует и вставляет все файлы png в этой папке в текстовый документ. Возможно ли это в R?

Я просмотрел пакет R2wd, но, к сожалению, в нем есть только функция, которая принимает RData и выводит график в текстовый документ (функция wdPlot).

У меня также есть RData, сохраненные для каждого графика, поэтому разум диктует, что я должен иметь возможность просто загрузить RData, связанный с конкретным графиком, а затем использовать wdPlot . Проблема в том, что когда я сгенерировал свой png, графики были гробами, и я сделал следующее:

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 в документе Word, сначала загрузив его в R, я наивно делаю следующее, и он не выводит график в MS Word с увеличенным заголовком или любыми другими grid.editизменениями.

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-файлы. В разное время мне приходится копировать и вставлять их подмножество в текстовый документ. Мне лень каждый раз делать это вручную, и я хочу, чтобы программа делала это за меня.

ИЗМЕНИТЬ 1

Итак, согласно приведенным ниже предложениям, я прочитал об уценке. После этого сообщения Как установить размер для локального изображения использовать 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)
    }
 } 

```

Ниже приведен скриншот того, что находится в результирующем текстовом документе. Как я могу это исправить? Я хочу, чтобы изображения появлялись в документе одно за другим по мере выполнения цикла for выше.

введите здесь описание изображения

Обратите внимание, что я впервые использую Markdown, поэтому любые соответствующие руководства, ссылки на которые приведены в комментариях, также могут быть очень полезны.

EDIT 2 Я следовал примеру второго ответа ниже. Вот результат, который я получил: введите здесь описание изображениявведите здесь описание изображения

Как видите, изображений нет, только html-теги. Как это исправить?


person Frikster    schedule 25.11.2014    source источник


Ответы (2)


Если у вас есть сохраненные png, вы можете просто использовать немного html и цикл for, чтобы сохранить их в файл .doc.

редактировать 2 для окон

# 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


EDIT: небольшое обновление, чтобы показать явные пути к выходным данным и цифрам.

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.

person user20650    schedule 25.11.2014
comment
Я понимаю, что делает ваш пример. Теперь у меня есть текстовый документ со списком html-тегов для каждого изображения. Не могли бы вы дать мне ссылку на учебник, показывающий, как изменить теги html на реальные изображения? Я какое-то время безуспешно гуглил. Кроме того, если вы посмотрите на обновление в моем ОП, вы увидите, что у меня появилась новая проблема. - person Frikster; 27.11.2014
comment
Привет, Дирк - извините, я не могу указать на учебник, кроме w3.org (хотя, возможно, это даст немного информации w3.org/MarkUp/html3/img.html). Что делает приведенный выше код, так это создает ссылки на файлы png, и графики должны показывать, правильно ли определены пути, включая/исключая пробелы. Я добавил небольшое обновление (без особых изменений), чтобы показать, как я создаю ссылки с явными путями. Кстати, небольшой пример в моем ответе работал нормально, так как графики и выходной файл должны просто перейти в ваш рабочий каталог? Чтобы переместить файл (скажем, на другой компьютер), вам необходимо встроить изображения. - person user20650; 27.11.2014
comment
На самом деле вы правы в том, что вы получите список путей к изображениям, если вы откроете файл в текстовом редакторе (например, <img src=/home/daff/ex1.png>), но если вы откроете файл с помощью слова, графики должны отображаться. - person user20650; 27.11.2014
comment
Итак, похоже, ваш небольшой пример не работает. У меня есть exOut в моем рабочем каталоге, но когда я открываю его с помощью ms-word 2013, появляется экран с запросом на преобразование файлов. Я выбираю вариант по умолчанию, а затем просто получаю .doc с: ‹img src= ex1.png › ‹img src= ex2.png › ‹img src= ex3.png › ‹img src= ex4.png › ‹img src= ex5.png › Скриншот прикреплю к оп - person Frikster; 27.11.2014
comment
Я включил скриншот того, что делает ваш пример (он находится в разделе EDIT 2). Я запустил setwd(C:\Users\dirk\Downloads), а затем запустил ваш код точно так, как вы его написали, и на скриншоте показано, что я получил - person Frikster; 27.11.2014
comment
Еще раз привет, Дирк - извините, я был немного ленив и не пробовал на ПК с Windows - edit 2 опробован на W8 MSW2007 и работает, как и ожидалось. - person user20650; 27.11.2014
comment
Хорошо бы вы посмотрели на это. Ваш пример работает с OpenOffice, но не с MS-word 2013. Один балл за Open Source. Похоже, переключение даст мне то, что мне нужно. - person Frikster; 27.11.2014
comment
Отлично, у вас получилось то, что сработало. Итак, редактирование 2 не работает с word-2013? - person user20650; 27.11.2014
comment
omg да, это работает, но у меня внезапно возникла новая проблема. В именах моих png-файлов есть пробелы, и я вижу, что это убивает соединение. Например, если вы замените ex на e x в своем примере (таким образом, ex1.png становится e x1.png), то это больше не работает! Как я могу объяснить этот случай? - person Frikster; 27.11.2014
comment
Пробелы в имени файла ‹тут тут›. Что вам нужно сделать, так это поместить путь в кавычки, т.е. <img src="/home/daff/ex 6 .png">. Это должно сработать, измените на... temp <- paste0('<img src=', '\"/home/daff/', i, '\">'). (обратите внимание на экранированные кавычки \") ` - person user20650; 27.11.2014

Вы пробовали Rstudio и Markdown? Вы можете поместить свой код в куски, которые загружают файлы и сохраняют их как текстовый документ. http://rmarkdown.rstudio.com/word_document_format.html

person Robert    schedule 25.11.2014
comment
R Markdown — это то, что вам нужно. - person Athos; 25.11.2014
comment
Привет, спасибо. Я использую RStudio, но о Markdown слышу впервые. Судя по всему, мне удалось сохранить все изображения, как вы предложили, но когда я сохраняю их в файл Word, все мои изображения находятся друг над другом. Как я могу это исправить? Вы можете посмотреть мой OP, который я обновил, и он показывает, что я имею в виду. - person Frikster; 27.11.2014
comment
Попробуйте использовать 'grid.newpage()' после 'grid.raster'. Вам не нужно задавать параметры fig.width, fig.height. - person Robert; 27.11.2014