1

RInside を使用して C++ で R アプリケーションを構築しようとしています。コードを使用して指定したディレクトリにプロットを画像として保存したかったのですが、

png(filename = "filename", width = 600, height = 400)
xyplot(data ~ year | segment, data = dataset, layout = c(1,3), 
       type = c("l", "p"), ylab = "Y Label", xlab = "X Label",
       main = "Title of the Plot")
dev.off()

R から直接実行すると、指定したディレクトリにファイルが作成pngされます。しかし、RInside からの C++ 呼び出しを使用すると、同じ結果を再現できませんでした。(C++呼び出しを使用してすべてのベースプロットを再現できました。ラティスとggplotsのみの問題

次のコードも使用しましたが、

myplot <- xyplot(data ~ year | segment, data = dataset, layout = c(1,3), 
                 type = c("l", "p"), ylab = "Y Label", xlab = "X Label",
                 main = "Title of the Plot")
trellis.device(device = "png", filename = "filename")
print(myplot)
dev.off()

pngRで上記のコードを問題なく実行すると、ファイルが作成されます。しかし、C++ 呼び出しから、pngタイトルと xy ラベルが付いた空のパネルを持つファイルが作成され、完全なプロットではありません。

R.parseEval()RへのC++呼び出しに関数を使用しています。

適切な格子とggplot2プロットを適切に取得するには?

4

1 に答える 1

5

以下は、ラティスxyplotを png に出力します。これは最小限の例であり、 のバリエーションとして行われrinside_sample11.cppます。

#include <RInside.h>                    // for the embedded R via RInside
#include <unistd.h>

int main(int argc, char *argv[]) {

  // create an embedded R instance
  RInside R(argc, argv);               

  // evaluate an R expression with curve() 
  // because RInside defaults to interactive=false we use a file
  std::string cmd = "library(lattice); "
    "tmpf <- tempfile('xyplot', fileext='.png'); "  
    "png(tmpf); "
    "print(xyplot(Girth ~ Height | equal.count(Volume), data=trees)); "
    "dev.off();"
    "tmpf";
  // by running parseEval, we get the last assignment back, here the filename
  std::string tmpfile = R.parseEval(cmd);

  std::cout << "Can now use plot in " << tmpfile << std::endl;

  exit(0);
}

それは私のためにこのファイルを作成します:

ここに画像の説明を入力

于 2014-06-24T08:43:17.900 に答える