我试图在Processing上创建一个程序,可以在每次迭代处理的绘制部分时在R中进行一些计算。这些计算需要使用我需要在Rsession中加载的包内的函数来完成 我使用Rserve将R与Processing连接起来。 我曾经做过以下事情,但它导致在每次迭代中加载所述库。
void draw{
try {
c.eval("library('png');library('glmnet')");
}catch ( REXPMismatchException rme ) {
rme.printStackTrace();
} catch ( REngineException e ) {
e.printStackTrace();
}
所以我尝试了以下
void setup() {
try {
RConnection c = new RConnection();
c.eval("library('png');library('glmnet')");
} catch ( REngineException e ) {
e.printStackTrace();
}
void draw() {
try {
//calculations using functions from libraries above
}catch ( REXPMismatchException rme ) {
rme.printStackTrace();
} catch ( REngineException e ) {
e.printStackTrace();
}
}
但是第二种方法会导致以下错误
Cannot find anything called "c"
因此,我猜测连接在设置阶段后无法生存。 如何使用第二个结构保留rconnection?
答案 0 :(得分:0)
我对R一无所知,但问题似乎是你的变量超出了范围。你只需要在一个在setup()和draw()函数中给它作用域的地方声明,即在草图的顶部:
RConnection c;
void setup() {
try {
c = new RConnection();
c.eval("library('png');library('glmnet')");
}
catch ( REngineException e ) {
e.printStackTrace();
}
}
void draw() {
try {
//you can now use your c variable here
}
catch ( REXPMismatchException rme ) {
rme.printStackTrace();
}
catch ( REngineException e ) {
e.printStackTrace();
}
}
有关处理范围的更多信息,请访问here。