2017-06-05 47 views
0

我使用的是OS X系统上的ImageMagick命令创建由四个.png数字,我有我的硬盘上的一个2x2的面板:的R - 送两行命令系统

convert \(image1.png image2.png -append \) \ 
\(image3.png image4.png -append \) +append result.png 

当粘贴我的终端,上述命令获取由系统调整,接收>到第二行的开头:

convert \(image1.png image2.png -append \) \ 
> \(image3.png image4.png -append \) +append result.png 

由此得出的数字看起来像这样:

enter image description here

我试图从R内部重现此最后一个命令使用以下命令:

> line1 <- paste0(" convert \\(", " img1.png img2.png -append \\)", " \\") 
> line2 <- paste0(" < \\(", " img3.png img4.png -append \\) ", "+append result.png") 
> cat(paste(line1, line2, sep='\n')) 
convert \(img1.png img2.png -append \) \ 
< \(img3.png img4.png -append \) +append result.png 

显然,从cat结果是什么,我需要,但我不能找到正确的方法发送给系统。我试图把它与system结合,但我得到一个错误:

system(cat(paste(line1, line2, sep='\n'))) 
Error in system(cat(paste(line1, line2, sep = "\n"))) : 
    non-empty character argument expected 

的问题是:我怎样才能用R特定两行命令发送到系统?

+1

*一个。 *除非是第二个命令,否则不需要将它作为单独的行运行,您可以在第二次调用中传递该命令。 * b。* shell行尾部的'\'字符串会被换行符(作为额外的空格被忽略),所以如果你真的想传递它,只需要添加一个换行符('\ n') ,例如'system('echo $((2+ \ n 3))')'。 * c。* [magick'包](https://ropensci.org/tutorials/magick_tutorial.html)使得这一切都不必要。 * d。*解决这个问题的最好方法是先用'mfrow'或类似的方法将它们绘制在网格上。 – alistaire

+0

感谢您的建议@alistaire。有关'magick'软件包的任何特别提示?我安装了它,但我设法做的唯一事情是将数字连续组合......无法找到文档来帮助我创建一个“m x n”面板... – thiagoveloso

回答

0

基于对这个问题的评论,我最终找到了答案。这是我从R内部使用的代码:

system(paste0("convert \\(img1.png img2.png -append \\) \\(img3.png img4.png -append \\) +append result.png")) 
1

在你的ImageMagick命令删除新行\在第一线的末端,使命令只是一个长命令在同一行,如下所示:

convert \(image1.png image2.png -append \) \(image3.png image4.png -append \) +append result.png 

这应该避免>提示,允许你的命令继续传递而不会被>提示所迷惑>

1

使用magick包,使重复的​​例子,它可能看起来像

library(tidyverse) 
library(magick) 

# make and same sample images 
seq(4) %>% 
    map(~data_frame(x = seq(.x))) %>% 
    walk(~{ggplot(.x, aes(x, x)) + geom_point(); ggsave(paste0('plot', max(.x), '.svg'))}) 

# read images 
images <- image_read(paste0('plot', seq(4), '.svg')) 

# join pairs of images horizontally, then join the pairs vertically 
joined <- image_join(image_append(images[1:2]), 
        image_append(images[3:4])) %>% 
    image_append(stack = TRUE) 

# set margins 
m <- par('mar') 
par(mar = rep(0, 4)) 

# show plot 
plot(joined) 

# reset margins 
par(mar = m) 

# save plot 
image_write(joined, 'plot1234.png', format = 'png') 
+0

感谢您使用此解决方案。这有点慢,也许是因为我的'.png'文件是高分辨率的,但对我的问题来说效果很好。 – thiagoveloso