2017-06-05 3 views
0

私は私のディスク上に持っている4個の.pngの数字からなる2x2のパネルを作成するために、OS Xのシステム上ImageMagickコマンドを使用していますに2行のコマンドを送信しますRシステム

:結果の図は、このようになります

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

:私の端子は、上記のコマンドは、2行目の先頭に>を受け、システムによって調整します

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は、システムにその特定の2行のコマンドを送信するために使用することができますか?あなたのImageMagickのコマンドで

+1

*のように見えるかもしれません。 *セカンドコールで渡すことができる2番目のコマンドでない限り、別の行として実行する必要はありません。 * b。*シェル行の最後にある '\ 'は、改行文字をエスケープします(余分な空白として無視されます)。そのように渡す必要がある場合は、代わりに改行(' \ 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

最初の行の末尾に改行\を削除し、次のように単一の行に一つだけの長いコマンドのコマンドを作る:

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

関連する問題