C#: не может выполнить код из R

Я хочу показать эллипс в C#. Мои коды в порядке, когда он работает в R, но я получаю сообщение от C#, например: "Объект статический; операция не разрешена (Исключение из HRESULT: 0x8004000B (OLE_E_STATIC))" "

вот это мои коды:

df.rconn.Evaluate("library(cluster)")
df.rconn.Evaluate("library(rrcov)")
public void setScatter(int xAxis, int yAxis, int zAxis, List<string> variable) 
    {

        // plot from R
        //to show outlier with method : classic & robust Mve 
        this.comboBoxXAxis.SelectedIndex = xAxis;
        this.comboBoxYAxis.SelectedIndex = yAxis;
        dataform.rconn.EvaluateNoReturn("x<-X[," + xAxis + "] ");
        dataform.rconn.EvaluateNoReturn("y<-X[," + yAxis + "] ");
        dataform.rconn.EvaluateNoReturn("shape <- cov(X)");
        dataform.rconn.EvaluateNoReturn("center<- colMeans(X)");
        dataform.rconn.EvaluateNoReturn("d2.95 <- qchisq(0.95, df = 2)");
        //dataform.rconn.EvaluateNoReturn("gr<- grid(lty=3,col='lightgray', equilogs = 'TRUE')");
        //dataform.rconn.Evaluate("mtext('with classical (red) and robust (blue)')");
        dataform.rconn.EvaluateNoReturn("plot(x,y, main='Draw Ellipse ', pch=19,col='black', type='p')");
        dataform.rconn.EvaluateNoReturn("elp<- unname(ellipsoidPoints(shape, d2.95,center))");
        dataform.rconn.Evaluate(" lines(elp, col='red' , lty=7 , lwd=2)");
        //dataform.rconn.EvaluateNoReturn("lines(e)");
        //dataform.rconn.EvaluateNoReturn("lines(ellipsoidPoints(mve@cov, d2 = d2.95, loc=mve@center), col='blue', lty='7' , lwd='2') ");
        axGraphicsDevice2.RemoveFromConnector();
    }

в любом коде, который я комментирую, всегда появляется одна и та же ошибка. Я не знаю, почему эта проблема возникает. Есть идеи, как показать этот эллипс? Большое спасибо, потому что вы помогли мне в завершении моей диссертации.

1 ответ

Некоторая недостающая контекстная информация, но в соответствии с тем, что вы предоставляете, состоит в том, что ваш "rconn" (statconnector?) Не устраивает, когда операции обновляют графическое устройство (линии, mtext и т. Д.).

Поскольку мне нужно было протестировать некоторые графические R-материалы из C# (с R.NET) для своих собственных целей, я использовал ваш код в качестве основы и предложил его в качестве обходного пути для вас. Вы найдете пример консольного приложения, работающего с использованием R.NET, на GitHub по адресу: https://github.com/jmp75/rdotnet-support/tree/master/samples/DrawEllipse

скомпилирован / запущен из VS2013, Windows7 64 бит, .NET Framework 4.5.

Я заметил, что мне нужно было использовать dev.hold и dev.flush для интуитивного обновления.

e.Evaluate("dev.hold()");
e.Evaluate("mtext('with classical (red) and robust (blue)')");
e.Evaluate("dev.flush()");

Надеюсь это поможет.

Другие вопросы по тегам