66083


JRIを使い、正規分布の下に色を塗りたいなと考えています。Rで動く以下のようなコードをengine.evalを前につけて実行させようと思ったのですが、グラフが作成できません

[code]

    curve(dnorm(x,171,10),xlim=c(140,210))
    cord.x=c(160,seq(160,180,length=100),180)
    cord.y=c(0,dnorm(seq(160,180,length=100),171,10),0)
    polygon(cord.x,cord.y,col='skyblue')
    abline(h=0)
    
[/code]

javaではこう書きました。

[code]

    Rengine engine = new Rengine(new String[]{"--no-save"}, false, null);
            engine.eval("png('curve.png', 640, 480)");
            engine.eval("curve(dnorm(x,171,10),xlim=c(140,210))");
            engine.eval("cord.x=c(160,seq(160,180,length=100),180)");
            engine.eval("cord.y=c(0,dnorm(seq(160,180,length=100),171,10),0)");
            engine.eval("polygon(cord.x,cord.y,col='skyblue')");
            engine.eval("abline(h=0)");
            engine.eval("dev.off()");
            engine.end();
    
[/code]

これではグラフが作成できないのですが何がいけないのでしょうか？  
教えてくださると幸いです。


CC BY-SA 4.0
2020-04-28T07:08:33.463
66059
2020-04-28T16:56:46.340
2020-04-28T07:22:48.130
7290
36217
question
java r
正規分布の下に色を塗る。


上記の `Java` のコードで 下記のような `curve.jpg` ファイルができましたが、どこが問題なのでしょう。

参考までに私の動作確認した手順を書いておきます。

[![画像の説明をここに入力](https://i.stack.imgur.com/Y0LiH.png)](https://i.stack.imgur.com/Y0LiH.png)

JRI を詳しく知らなかったので <http://rforge.net/JRI/> を参考に インストール。  
動作確認しました。

### 設定手順

Eclipse をインストール  
R を インストール <https://www.r-project.org/>（私は R 4.0.0 for Windows を使いました）  
R Console で `install.packages("rJava")` を 実行  
ユーザの `C:\Users\[ユーザ名]\Documents\R\win-library\4.0\rJava`  
フォルダに ライブラリ等がインストールされました。

Eclipse で 質問にある Java ソースを記述

ビルドバスには さきほど `rJava` パッケージをインストールした時の  
`C:\Users\[ユーザ名]\Documents\R\win-library\4.0\rJava\jri`  
にある `JRI.jar` `JRIEngine.jar` `REngine.jar` を追加。

Java プログラムを実行するときの VM arguments に  
`-Djava.library.path=C:\Users\[ユーザ名]\Documents\R\win-
library\4.0\rJava\jri\x64`  
環境変数 PATH に `C:\Program Files/R/R-4.0.0/bin/x64`  
を指定して プログラムを実行。

すると Java の プロジェクトフォルダの中に 上記のような画像ファイルが作成されました。

にゅZen さんの手順と何が違っていますか？

### dotnet Core の場合

参考までに dotnet core だと超簡単で

[code]

    dotnet new console
    dotnet add package R.Net
    ** ここで Program.cs 編集して保存
    dotnet run
    
[/code]

だけで同じ画像が作成されました。

`Program.cs` の例

[code]

    using System;
    using RDotNet;
    
    namespace test1
    {
        class Program
        {
            static void Main(string[] args)
            {
                // R.dll のある ディレクトリを設定する
                REngine.SetEnvironmentVariables(@"C:\Program Files\R\R-4.0.0\bin\x64");
    
                REngine engine = REngine.GetInstance();
                engine.Evaluate(@"
    png('curve.png', 640, 480)
    curve(dnorm(x,171,10),xlim=c(140,210))
    cord.x=c(160,seq(160,180,length=100),180)
    cord.y=c(0,dnorm(seq(160,180,length=100),171,10),0)
    polygon(cord.x,cord.y,col='skyblue')
    abline(h=0)
    dev.off()
    ");
    
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2020-04-28T16:43:20.760
66083
2020-04-28T16:56:46.340
2020-04-28T16:56:46.340
18851
18851
66059
answer