Forschung in Matrix-Paketen - Seite 3

 
Alexey Volchanskiy:

Toll, es ist mein erster Tag, an dem ich R lerne. Bitte beantworten Sie meine Fragen, ich möchte die Möglichkeiten von R und Matlab vergleichen. Aber seien Sie nicht feindselig, seien Sie ausgeglichen und ruhig :).

  1. Ist R eine Sprache mit OOP-Fähigkeiten?
  2. Kann ich R verwenden, um eine 32-Bit- und eine 64-Bit-DLL zur direkten Verwendung von MQL4/5 zu erstellen? Wenn ja, wie groß muss das Paket sein, das ich installieren muss, um eine solche DLL auf dem Computer eines Benutzers zu verwenden?
  3. Kann ich allgemeine DLLs für den direkten Zugriff von R aus verbinden?
  4. Gibt es ein Analogon zu Simulink in R?
  5. Warum wird in allen Rezensionen betont, dass R ein Statistikprogramm ist? Ich interessiere mich für DSP. Gibt es in R Pakete für digitale Signalverarbeitung?
  6. Verfügt R über ein eingebautes kompaktes Format zum Speichern von Daten, ähnlich den .mat-Dateien in Matlab?

1. Ja. Der Vergleich verschiedener Programmiersprachen ist keine leichte Aufgabe, da die Verwendung eines Tools und die Nichtverwendung eines anderen oft eine Frage des Geschmacks der Programmierer ist.

Ich bin kein R-Experte, aber ich möchte dies erwähnen:

R hat kein Konzept für einen "Skalar". Es ist ein Vektor der Länge 1. Das heißt, die Arithmetik basiert auf Matrixoperationen. Eine Codezeile C= A+B kann eine Matrixoperation aufrufen

In R wird der Begriff "Objekt" zu seiner logischen Schlussfolgerung gebracht: Es kann ein Vektor, eine Matrix, eine Matrix von Programmen und ganz allgemein die Umgebung sein, in der ein Benutzerprogramm ausgeführt wird.

In R ist es recht einfach, Programme zu schreiben, die nicht nur die Prozessoren und Kerne des Ausführungsrechners belasten, sondern auch die benachbarten Rechner im lokalen Netzwerk

...

2. Mein Wissen reicht für eine Antwort nicht aus. Offensichtlich können Sie das nicht. Dies ist auf die Besonderheiten der Konstruktion von R selbst zurückzuführen, das beim ersten Auftreten ein Interpreter ist. Aber das ist eine oberflächliche Sichtweise. Die Tatsache, dass R eine Symbiose mit einer gut dokumentierten Schnittstelle zu C ist. Die Hauptstärke von R sind die Pakete (über 7000 Tausend, die etwa 120 000 Funktionen enthalten), und diese Pakete sind in der Regel Verweise auf Programme in C oder Fortran. Der Punkt ist, dass R C- und Fortran-Bibliotheken für alle rechenintensiven Operationen verwendet.

Den APIs wird viel Aufmerksamkeit gewidmet, aber das übersteigt meine Qualifikationen

3. Ja

4. Das glaube ich nicht. Es gibt eine Reihe von Werkzeugen (außer den Standardwerkzeugen) für die Erstellung von GUIs, aber das ist nicht alles. In diesem Abschnitt möchte ich die in R entwickelten Werkzeuge erwähnen, die in den üblichen Programmiersprachen nicht vorhanden sind: Es handelt sich um Methoden der statistischen Modellprüfung. Die Instrumente zur Verarbeitung der Ergebnisse statistischer Tests sind sehr weit entwickelt und fortgeschritten. In R können Sie leicht die Frage beantworten: "Um wie viel weicht der Mittelwert von der mathematischen Erwartung für eine Stichprobe von 100 Beobachtungen ab?"

5. Statistik, im weitesten Sinne des Wortes, ist eine Funktion von R. Vergessen Sie nicht die Diagrammwerkzeuge, die für die Arbeit mit Statistiken von grundlegender Bedeutung sind. Um sich einen Überblick über die R-Tools zu verschaffen, öffnen Sie die Website, die thematische Zusammenstellungen von Paketen enthält.

6. Kann man nicht vergleichen. Aber es gibt "Bytecode". Aber der Punkt ist ein anderer. Ein Programm in R, das mehrere tausend Zeilen Code enthält, ist exotisch. Ein gewöhnliches R-Programm ist ein Paketfunktionsaufruf.

 
Alexey Volchanskiy:
Ich muss versuchen, einige meiner Programme in Matlab in R zu übersetzen, um die Geschwindigkeit zu vergleichen. Wenn ich am Wochenende Zeit habe, das herauszufinden, werde ich es tun und Bericht erstatten. Matlab ist ziemlich langsam, ich mache vieles in C# oder C++ und füge es aus Geschwindigkeitsgründen als DLL ein.

R selbst ist dreimal zurückgeblieben. Es ist ein Dolmetscher. Keine Probleme mit dem Debugging, zuerst habe ich angefangen, den Debugger zu benutzen, und dann habe ich herausgefunden, dass es nichts bringt.

Apropos R-Geschwindigkeit: Hier gibt es mehrere Überlegungen.

1. man kann es in Byte-Code übersetzen, aber es ist ein Kinderspiel

2. nicht zu vergessen, dass Pakete für rechenintensive Operationen Bibliotheken verwenden, die mit Blick auf die Geschwindigkeit ausgewählt wurden

3. eine Bibliothek für Matrixoperationen verwendet wird

4. Schleifenoperatoren sind für Matrixoperationen nicht erforderlich

5. Laden aller Kerne. Standard und sehr einfach, wo immer es der Algorithmus erlaubt.

Im Allgemeinen funktioniert der Vergleich von Programmen durch einfaches Umschreiben von einer Sprache in die andere, wenn die Kenntnisse in beiden Sprachen gleich sind.

 
Alexey Volchanskiy:
Ich muss versuchen, einige meiner Programme in R in Matlab zu übersetzen, um die Geschwindigkeit zu vergleichen. Wenn ich es bis zum Wochenende herausfinde, werde ich es tun und darüber berichten. Matlab ist ziemlich langsam, ich erledige viele Dinge in C# oder C++ und füge es aus Geschwindigkeitsgründen als DLL ein.

Wenn Sie etwas nicht-triviales zählen wollen, werden Sie ein Paket verwenden. Wenn das Paket in "Pluspunkten" geschrieben ist, wird es fliegen. Wenn nicht, könnte es krabbeln.

Aus eigener Erfahrung: Wenn Sie versuchen, eine Schleife durch die Elemente von data.frame (ein Array, das eine Mischung von Datentypen enthalten kann) zu ziehen und etwas zu zählen, kann das extrem lang werden. R ist extrem langsam, wenn es darum geht, Berechnungen auf großen Arrays durchzuführen, es sei denn, Sie verwenden spezielle Pakete.

Aber es gibt immer irgendeine Bibliothek, in der die Berechnung, die ich benötige, bereits implementiert ist, und ich kann z. B. rollapply(x$V1, mean) aufrufen und gleitende Durchschnitte für alle Elemente berechnen, anstatt lästig lange Array-Element für Element zu konvertieren.

 
СанСаныч Фоменко:


5. Alle Kerne laden. Standard und sehr einfach, wo immer es der Algorithmus erlaubt.


SanSanych, können Sie das bitte klarstellen? Wir haben die Parallelität in R untersucht und sind zu dem eindeutigen Schluss gekommen, dass ein Kern belastet wird (es sieht so aus, dass alle 4 Kerne zu 25 % belastet werden), es sei denn, das Spezialpaket sieht etwas anderes vor.
 
СанСаныч Фоменко:

R selbst ist dreimal zurückgeblieben...


Welchen Anwendungsbereich hat diese Software dann? Ein effizientes Sortiment für eine Boutique, die chinesische Konsumgüter verkauft, zu analysieren?
 
СанСаныч Фоменко:

... Die Hauptstärke von R sind die Pakete (über 7000 Tausend, die etwa 120 000 Funktionen enthalten)...

Und wie viele Pakete und Funktionen sind notwendig und ausreichend, um einen stabilen Gewinn zu erzielen?

Welche Software werden wir als Nächstes beherrschen, wenn R nicht damit umgehen kann?

 
Alexey Burnakov:
SanSanych, können Sie das bitte klarstellen? Wir haben uns die Parallelität in R angeschaut und sind zu dem klaren Schluss gekommen, dass ein Kern belastet wird (es sieht so aus, als ob alle 4 Kerne zu 25% belastet werden), es sei denn, im Spezialpaket ist etwas anderes angegeben.
Paralleles Rechnen ist eine sehr fortschrittliche Sache und hat eine Menge Veröffentlichungen, z.B. attac.
Dateien:
parallel.zip  387 kb
 
Dmitry Fedoseev:

Welchen Anwendungsbereich hat diese Software dann? Ein effektives Sortiment für eine Boutique, die chinesische Konsumgüter verkauft, zu analysieren?

Bitte lesen Sie meinen Beitrag in seiner Gesamtheit.

Zum Hinzufügen.

Wenn ich über R selbst schreibe, vergessen Sie bitte nicht, dass echter R-Code nur aus einem kleinen Teil des R-Textes selbst besteht.

Das einfachste Beispiel.

Weiterleitung: A=B.

Wenn A und B Skalare sind, ist es wahrscheinlich, dass der Code in MKL schneller sein wird.

In R gibt es aber keine Skalare: A und B sind zumindest Vektoren. In MCL sind es Zyklen, in R ist es ohne Zyklen geschrieben und als Teil eines Pakets implementiert, der heutigen Matrixberechnung, die an Effizienz kaum zu überbieten ist. Und wenn man R und MCL in Bezug auf die Matrixberechnungen vergleicht, ist R grundsätzlich effizienter.

Es ist ein allgemeines Prinzip von R, Teile von effizientem Standardcode zu verwenden, der nicht in R geschrieben wurde - normalerweise in C, wenn keine spezialisierten Standardbibliotheken verfügbar waren.

Fazit: R ist durch die Verwendung interner Unterroutinen und paralleler Berechnungen recheneffizient

 
Event:

Und wie viele Pakete und Funktionen sind notwendig und ausreichend, um einen stabilen Gewinn zu erzielen?

Welche Software werden wir als nächstes beherrschen, wenn R nicht ausreicht?

Für die Bedürfnisse eines einzelnen Händlers haben wir redundante Software.

Heute ist R die führende Software auf dem Gebiet der Statistik im weitesten Sinne. So sind beispielsweise die Methoden des maschinellen Lernens, die traditionell der künstlichen Intelligenz zugerechnet werden, in R weit verbreitet.

Es gibt noch eine weitere Nuance.

Der neueste Schrei auf diesem Gebiet ist das R-Paket. Und hier ist der Grund dafür. Heutzutage enthalten wissenschaftliche Veröffentlichungen im Bereich der Statistik neben Formeln in der Regel auch Code in R, sozusagen ein Zeichen für einen guten mauvais ton. Und vom R-Code in einem Artikel zu einem vollwertigen Paket in R ist nur ein Schritt.

Hinzu kommt, dass alles, was mit R zu tun hat, ein weltweiter Treffpunkt ist. Die Aufnahme eines Pakets in die R-Repositories macht den Autor eines Pakets in R zu einer weltweiten Berühmtheit. R ist ein freies, quelloffenes System ohne Nutzungsbeschränkungen. Genau diese Eigenschaft von R ermöglicht es R, den bisherigen Marktführern SAS, SPSS und auch der verwirrenden Sprache Python die Weltherrschaft abzunehmen.

Nicht umsonst ist Microsoft vor etwa einem Jahr in R eingestiegen, indem es eine kostenpflichtige Variante von R - Revolution Analytics - in seinen Besitz gebracht hat und diese nun aktiv fördert.

 
СанСаныч Фоменко:
Paralleles Rechnen ist eine sehr fortschrittliche Sache, zu der es viele Veröffentlichungen gibt, z.B. attac.
Herzlichen Glückwunsch.