English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Operações em R no Java

Primeiro, instale o pacote "Rserve" no R.

Se você estiver usando a interface gráfica RGui, na barra de menu, na seção Pacotes - O instalador de pacotes pode concluir essa etapa. Se você estiver usando o console R puro, você pode usar o seguinte comando:

install.packages("Rserve", repos = "https://mirrors.ustc.edu.cn/CRAN/)

Após a instalação do Reserve, no diretório raiz do R haverá um diretório library, onde você encontrará o Rserve/No diretório java, você encontrará dois arquivos: REngine.jar e Rserve.jar.

Esses dois arquivos são bibliotecas de interface R em Java.

Atenção:Java não pode usar as funcionalidades do R de forma independente do sistema R!

Primeiro passo: inicie o Reserve

Acesse o R e insira o seguinte código para iniciar o Rserve:

library("Rserve")
Rserve()

Se o início for bem-sucedido, o R mostrará o caminho do Rserve.

Segundo passo: escreva o programa Java

Primeiro, importe os dois jars que acabamos de mencionar.

Após a importação, conhecemos uma classe crucial: RConnection, que pode ser usada para se conectar ao Rserve.

Nós estamos usando R em Java para realizar uma operação de inversão de matriz:

import org.rosuda.REngine.Rserve.*;
public class Main {
    public static void main(String[] args) {
        RConnection rcon = null;
        try {
            // Conectar-se ao Rserve
            rcon = new RConnection("127.0.0.1");
            
            // A função eval() é usada para fazer o R executar instruções R
            // Aqui foi criado um m1 Matriz
            rcon.eval("m1 = matrix(c(1, 2, 3, 4, 2, 2,
            
            // , byrow=TRUE")1 A função solve() em R resolve m
            // e retorna o resultado, a função asDoubleMatrix pode converter os dados em
            // Array bidimensional double em Java para representar a matriz
            double[][] m1 = rcon.eval("solve(m1).asDoubleMatrix();
            
            // Exibir o conteúdo da matriz
            for (int i = 0; i < m1.length; i++) {
                for (int j = 0; j < m1[0].length; j++)
                    System.out.print(m1[i][j] + "\t");
                System.out.println();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (rcon != null) rcon.close();
        }
    }
}

Resultados da Execução:

-1.9999999999999998    1.0    
1.4999999999999998    -0.49999999999999994

Claramente, o resultado está correto, mas毕竟是 floats, então a impressão pode não parecer tão bonita, mas não afeta o uso dos dados.