Ich habe versucht, die Grammatik von R und Java zu übersetzen [Von Zeit zu Zeit aktualisiert]

Vorwort

Was ist das?

Dies ist ein Vergleich der Grammatik von ** R **, einer auf die Verarbeitung und Analyse statistischer Daten spezialisierten Sprache, mit dem Format von ** Java **, einer Allzwecksprache. Bitte beziehen Sie sich darauf, damit Leute, die Java verstehen, es verwenden können, wenn sie R schreiben möchten.

Erforderliche Vorkenntnisse (Java-Seite)

・ Verstehen Sie die Variablentypen (int, double, boolean, String, around Object). ・ Mehrdimensionales Array verstehen ・ Liste und Karte können verwendet werden (es wird ein Beispielcode verwendet) ・ Extended for-Anweisung [Java 8] kann verwendet werden (wie oben)

Wenn Sie sagen, was Sie mit R tun möchten, werden Sie verstehen, wenn dieser Bereich gedrückt gehalten wird.

Erforderliche Vorkenntnisse (R-Seite)

・ Installierte R. ・ Ich weiß, dass am Ende des Satzes kein Semikolon erforderlich ist. ・ Yaruki

R-Java Opposite Dictionary

Allzweckgrammatik

Gemeinsam für Java und R.

・ ** Andere arithmetische Operatoren als abteilungsbezogene ** (+, -, *) -Vergleichsoperator (<,>, <=,> =,! =) ・ Bedingter Logikoperator(&&, ||), Logischer Operator(&, |),Verweigerung(!)

Verschiedene Dinge

Java R
Auswechslung n = 0 n <- 0
Boolescher Wert true, false TRUE, FALSE
(Großbuchstabe)
Teilung(Ganzzahliger Quotient) a / b a %/% b*1
Überschuss a % b a %% b
Leistung Math.pow(a, b) a ^ b
Zuwachs
Dekrement
++a or a++
--a or a--
(a <- a+1)
nicht existieren
Standardausgabe System.out.println("Hello, world!"); print("Hello, world!")
Standardeingabe Scannerklasse usw. readline("input :")*2
Definition der Konstante final int N = 0; nicht existieren
Auskommentieren //comment
/* comment */
#comment*3

Hinweis

if, for, switch-Anweisung

if_for_switch.java


if(statement){
  System.out.println(statement is true);
}

for(int i=0;i<n;i++){
  System.out.println("for loop " + i);
}

switch(num){
  case 0:
    System.out.println("switch num=0");
    break;
  case 1:
    System.out.println("switch num=1");
    break;
  default:
    System.out.println("switch default");
}

if_for_switch.R


if(statement){
  print("statement is TRUE")
}

for(i in 1:n){
  print(paste("for loop ", i-1))
}

switch(num,
  "0" = {print("switch num=0")},
  "1" = {print("switch num=1")},
  {print("switch default")}
)

Hinweis Wie bei der Standardausgabe in der R for-Anweisung ist es nicht möglich, eine Zeichenfolge und einen durch + verbundenen numerischen Wert auszugeben (genau genommen wird dies auch in Java nicht empfohlen). Verwenden Sie die Methode paste (). {} In jeder Anweisung des R kann die switch-Anweisung weggelassen werden, wenn der Inhalt nur eine Anweisung ist.

So rufen Sie jedes Element eines zweidimensionalen Arrays auf (R: Matrix)

matrix.java


int[][] a = new int[4][4];

matrix.R


a <- matrix(ncol=4, nrow=4)

Beide sehen fast gleich aus (es gibt Unterschiede wie "0", wenn der Anfangswert Java ist, und "NA", wenn es R ist. Im Fall von R ist der Wert, den der Inhalt des Matrixtyps annimmt, ein numerischer Wert. Nicht ausschließlich) Wie auf jedes Element dieser Matrix Bezug genommen wird, ist wie folgt.

Java R
1 Elementreferenz a[2][3] a[3,4]
1 Elementreferenz a[3][0] a[4]Odera[4,1]
1 kann nur am Zeilenanfang weggelassen werden
Linienreferenz a[1] a[2,]
Spaltenreferenz - a[,2]

Beseitigen Sie die Verwendung von for-Anweisungen (Familie anwenden)

Wenn Sie die for-Anweisung nicht verwenden, ist sie für eine Person wie R, aber schwer zu erklären. Lassen Sie uns also sehen, was die Apply-Familie im Gegensatz zu Java tut.

Wenden Sie die Funktion auf jedes Element eines mehrdimensionalen Arrays an

apply.java


//Sequenzgenerierung und Initialisierung von hier aus
int[][] mtrx = new int[4][4];
for(int i=0;i<4;i++){
  for(int j=0;j<4;i++){
    mtrx[i][j] = i * 4 + j;
  }
}
//Bisher
//Vorbereitung von Funktionen, die von hier aus wiederholt angewendet werden sollen
int add(int i){
  return i+1;
}
//Bisher
//Scannen Sie von hier aus das Array und wenden Sie die Funktion an
for(int i=0;i<4;i++){
  for(int j=0;j<4;i++){
    mtrx[i][j] = add(mtrx[i][j]);
  }
}
//Bisher

Ein zweidimensionales Array mit den Zahlen 0 bis 15 wird erzeugt und jedem Element wird 1 hinzugefügt (dies ist natürlich eine haarsträubende Erklärung) ~ ~ Es ist redundant geschrieben. ).

apply.R


#Matrixgenerierung und Initialisierung von hier aus
a <- matrix(c(1:16), ncol=4, nrow=4, byrow=TRUE)
#Bisher
#Vorbereitung von Funktionen, die von hier aus wiederholt angewendet werden sollen
add <- function(i){
  return(i+1)
}
#Bisher
#Scannen Sie von hier aus die Matrix und wenden Sie die Funktion an
apply(a, c(1,2), add)
#Bisher

Es kann sehr einfach so geschrieben werden. Ich habe eine Funktion erstellt, die hier wiederholt ausgeführt wird, aber Sie können jede der verfügbaren Funktionen verwenden (z. B. gibt Ihnen sqrt eine Matrix mit den Quadratwurzeln aller Elemente).

Hinweis -Die Option "byrow" der Funktion "matrix ()" ist eine Option, um den Quellvektor (in diesem Beispiel "c (1:16)" als Matrix in Zeileneinheiten anzuordnen. Der Standardwert ist FALSE, daher wird die durch Ausführen dieses Codes erhaltene Matrix transponiert. -Die zweite Option (c (1: 2)) der Funktion apply () gibt den Bereich an. Machen Sie dasselbe mit 1 für "alle Zeilen" und 2 für "alle Spalten". ** Wenn Sie nur eine for-Schleife in einem zweidimensionalen Array drehen möchten, müssen Sie sich darüber keine Gedanken machen, also spielen Sie nicht achtlos damit herum **. Insbesondere machen die folgenden zwei Codes ungefähr dasselbe. R ist wirklich nur das, nicht überschreiben.

apply2.java


int sum(int[] arr){  //Eine Funktion, die die Summe der Arrays angibt. R ist Standard
  int sum = 0;
  for(int i : arr){
    sum += i;
  }
  return sum;
}

int[] sum_arr = new int[4];
for(int i=0;i<4;i++){
  sum_arr[i] = sum(mtrx[i]);  //Summe für alle Zeilen()Funktion anwenden
}

apply2.R


apply(a, 1, sum)

Funktion auf jedes Element von HashMap anwenden (lapply)

Zunächst muss verstanden werden, dass Listentypvariablen in R ** nicht denselben Wertetyp enthalten müssen **. Mit anderen Worten, es ist so, als würde man deklarieren, dass Java Map Objekttypen verarbeitet, es sei denn, Sie deklarieren etwas Besonderes.

lapply.java


Map<String, Object> a = new HashMap<>();
a.put("i", 123);
a.put("d", 4.56d);
a.put("b", false);

lapply.R


a <- list(i = 123, d = 4.56, b = FALSE)

Auf diese Weise ist es möglich, gleichzeitig einen Ganzzahltyp, einen Gleitkommatyp mit doppelter Genauigkeit und einen logischen Typ zu haben. lapply führt die Verarbeitung von Listen und Matrizen durch und ** gibt die Ergebnisse als Liste zurück **.

lapply2.java


Map<String, Object> a = new HashMap<>();
a.put("i", 123);
a.put("d", 4.56d);
a.put("b", false);

for(Object o : a.values()){
  add(o);
}    //Kompilierungsfehler!

lapply2.R


a <- list(i = 123, d = 4.56, b = FALSE)

lapply(a, add) #add()Funktion ist anwendbar.Umgeleitet von R.

Da das in apply.java definierte Argument der Funktion add () vom Typ int ist, kann der obige Code nicht in Java ausgeführt werden. In R ist jedoch keine Typdeklaration erforderlich, und die Variable wird automatisch mit dem größten Typ abgeglichen, sodass dieser Code ausgeführt werden kann (behandelt als FALSE = 0, TRUE = 1) und die Ausgabe wie folgt lautet. Zu

> lapply(a, add)
$i
[1] 124

$d
[1] 5.56

$b
[1] 1

Sie können lapply für 2D-Arrays verwenden, dies ist jedoch umständlich, es sei denn, Sie müssen als Listentyp ausgeben. Sie können davon ausgehen, dass es sich um eine solche Funktion handelt. Für die von apply.java (apply.R) generierte 4x4-Matrix geben die folgenden zwei lapply () fast dasselbe aus.

lapply3.java


Map<String, Integer> lapply(int[][] arr){
  Map<String, Integer> a = new HashMap<>();
  for(int i=0;i<arr[0].length;i++){
    for(int j=0;j<arr.length;j++){
      a.put(String.valueOf(i * 4 + j + 1), add(arr[j][i]));
      //arr[i][j]Nicht arr[j][i]Beachten Sie, dass
      //In R wird spaltenweise nach zweidimensionalen Arrays gesucht
    }
  }
  return a;
}

lapply3.R


lapply(a, add)  
#apply.Addiere für alle Elemente von a wie in R.()Bewerben, aber
#Das Erscheinungsbild des Ausgabeergebnisses wird angewendet.Es ist völlig anders als R. Bitte laufen und überprüfen

Hinweis -In lapply3.java wird Map <String, Integer> als Rückgabetyp verwendet, aber in Wirklichkeit wird die Zahl von 1 bis 16 (in String-Typ umgewandelt) in Key eingegeben, sodass sie redundant aussieht. Da die Zeilennummer und die Spaltennummer der R-Matrix Namen haben können, wird eine solche Beschreibung verwendet, da der im Schlüssel eingegebene Wert möglicherweise kein numerischer Wert ist, wenn versucht wird, genau zu entsprechen.

String-Verarbeitung

Insgesamt ist R nicht gut in der Zeichenfolgenverarbeitung. Wenn für die Datenvorverarbeitung ein großer Teil der Zeichenfolgenverarbeitung erforderlich ist, sollten Sie zunächst eine andere Sprache oder eine Tabellenberechnungssoftware verwenden.

Verknüpfen

str_concat.java


//Beispiel 1
String str = "Hello" + " " + "world!";  //Nicht zu empfehlen, da es viel Speicher verbraucht

//Beispiel 2
StringBuilder builder = new StringBuilder();
builder.append("Hello");
builder.append(" ");
builder.append("world!");
String str = builder.toString();

str_concat.R


str <- paste("Hello", " ", "world!")

Ergänzende Bestimmungen

Ausführungsumgebung des Codes auf dieser Seite

Java -Java version: 1.8.0_231 -IDE: Intellij IDEA Community Edition 2019.2

R -R version: R x64 3.6.0 -IDE: R Studio 1.2.1335

Bitte beziehen Sie sich darauf, wenn Sie es nicht gut ausführen können.

Recommended Posts

Ich habe versucht, die Grammatik von R und Java zu übersetzen [Von Zeit zu Zeit aktualisiert]
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Vom jungen Java (3 Jahre) bis zu Node.js (4 Jahre). Und der Eindruck, nach Java zurückzukehren
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
R von Java ausführen Ich möchte rJava ausführen
Ich habe die Eigenschaften von Java und .NET verglichen
Das Datum und die Uhrzeit von java8 wurden aktualisiert
[Java] Ich möchte die Differenz zum Datum berechnen
Wie schreibe ich Scala aus der Perspektive von Java
Java-Sprache aus der Sicht von Kotlin und C #
[Eclipse] Zusammenfassung der Umgebungseinstellungen * Von Zeit zu Zeit aktualisiert
Ich habe die Typen und Grundlagen von Java-Ausnahmen zusammengefasst
Ich habe das Verhalten von Java Scanner und .nextLine () nicht wirklich verstanden.
[JDBC] Ich habe versucht, von Java aus auf die SQLite3-Datenbank zuzugreifen.
Befehl zum Überprüfen der Anzahl und des Status von Java-Threads
Ich habe die grundlegende Grammatik von Ruby kurz zusammengefasst
[Java] Verwenden Sie ResolverStyle.LENIENT, um Datum und Uhrzeit gut zu handhaben
[Java] Ich habe über die Vorzüge und Verwendungen von "Schnittstelle" nachgedacht.
In Java möchte ich mehrere angegebene Zeichen nur von Anfang bis Ende abschneiden.
Der Weg von JavaScript nach Java
Memorandum Poem (von Zeit zu Zeit aktualisiert)
[Java] Verschiedene Zusammenfassungen an die Leiter von Klassen und Mitgliedern
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
Zusammenfassung der Forschungsergebnisse zur Objektorientierung [Von Zeit zu Zeit aktualisiert]
[Java] So konvertieren Sie vom Typ String in den Pfadtyp und erhalten den Pfad
Lassen Sie uns die Java 8-Grammatik aus der Sicht der iOS-Ingenieure zusammenfassen
Einführung in Java zum ersten Mal # 2
Konvertieren Sie von der Java-UTC-Zeit in die JST-Zeit
[Tag: 5] Ich habe die Grundlagen von Java zusammengefasst
Was sind die aktualisierten Funktionen von Java 13
[Java] Ich habe die grundlegende Grammatik persönlich zusammengefasst.
Ausgabe des Buches "Einführung in Java"
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
Ich möchte Bilder mit REST Controller von Java und Spring anzeigen!
[Ruby] Ich möchte nur den Wert des Hash und nur den Schlüssel extrahieren
Bestätigung und Umgestaltung des Flusses von der Anfrage zum Controller in [httpclient]
Ich möchte das Argument der Annotation und das Argument der aufrufenden Methode an den Aspekt übergeben
[Java-Verbesserungsfall] Wie man die Grenze des Selbststudiums und darüber hinaus erreicht
Ich möchte den Feldnamen des [Java] -Felds erhalten. (Alter Ton)
Ich habe versucht, die Geschwindigkeit von Graal VM mit JMH zu messen und zu vergleichen
Durch die Überprüfung der Funktionsweise von Java unter Linux konnte ich die Kompilierung und Hierarchie verstehen.
[Reverse] Spring Security (von Zeit zu Zeit aktualisiert)
Ich habe die Daten der Reise (Tagebuchanwendung) in Java erhalten und versucht, sie # 001 zu visualisieren
[Förderung des Ruby-Verständnisses (1)] Wenn Sie von Java zu Ruby wechseln, verstehen Sie zuerst den Unterschied.
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
SpringBoot nützliche Websitesammlung (von Zeit zu Zeit aktualisiert)
[Java] Stellen Sie die Zeit im Browser mit jsoup ein
Punkte, auf die ich beim Erstellen einer Android-App gestoßen bin [Von Zeit zu Zeit aktualisiert]
[Java] Abrufen und Anzeigen des Datums 10 Tage später mithilfe der von Java 8 hinzugefügten Zeit-API.
[Java] Beispiel eines Programms, das die Maximal- und Minimalwerte von einem Array abruft
[Java] Der verwirrende Teil von String und StringBuilder
Ich möchte den Inhalt der Absicht var_dump
Unterschied zwischen Java, C # und JavaScript (wie man den Grad der Fettleibigkeit findet)
[Von Zeit zu Zeit aktualisiert] Links, die verschuldet sind
Ich möchte, dass Sie Scala vorerst als besseres Java verwenden
Ich möchte nur die Zeit aus Zeittypdaten abrufen ...! [Strftime] * Zusätzliche Hinweise
Ich möchte schnell von Java nach SQLite schreiben