Text-Datei als Vektor einlesen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

lax
Beiträge: 4
Registriert: Do Jan 02, 2020 5:37 pm

Text-Datei als Vektor einlesen

Beitrag von lax »

Hallo, ich möchte eine .txt-Datei in R einlesen (Die Datei besteht nur aus einem "Wort", und das sind 10 Millionen Zahlen). Nun möchte ich, dass diese 10 Millionen Zahlen in einen Vektor mit 10 Millionen Elementen "gepackt" werden. Ich habe es schon mit der scan-Funktion probiert, jedoch weiß ich nicht welche Zusatzinformation ich der Funktion geben muss, dass er die Datei auseinanderpflückt. Ich bekomme es schon hin, dass ein Vektor erstellt wird, aber jedes Mal nur so, dass in diesem einen Element dann diese 10 Millionen Zahlen stehen und wenn ich es ausgeben will, schmiert mir R ab. So sieht mein Befehl bisher aus:

-----------------------------------------

pi.str <- c(scan(file="C:\\Users\\pi-10-million.txt",what=character(),sep="",flush=TRUE))
pi.str

-----------------------------------------

Danke schonmal für die Hilfe. :|
lax

Benutzeravatar
student
Beiträge: 374
Registriert: Fr Okt 07, 2016 9:52 am

Re: Text-Datei als Vektor einlesen

Beitrag von student »

Hallo lax,

ich nehme an, zwischen den Zahlen steht kein Trennzeichen, sondern ist halt nur eine Zahl wie "3.14.....". Ich denke, hier kann das Paket stringr möglicherweise weiterhelfen.
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)

Athomas
Beiträge: 327
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Text-Datei als Vektor einlesen

Beitrag von Athomas »

Eine leicht veränderte Version klappt bei mir ohne Probleme - und fix:

Code: Alles auswählen

Zahl <- paste(sample(0:9, 10000000, replace=TRUE), collapse="")
write.table(Zahl, "D:/temp/Zahl.txt", row.names=FALSE, col.names=FALSE, quote=FALSE)

Zahl.str <- scan(file="D:/temp/Zahl.txt", what=character(), flush=TRUE)
Zahl == Zahl.str

lax
Beiträge: 4
Registriert: Do Jan 02, 2020 5:37 pm

Re: Text-Datei als Vektor einlesen

Beitrag von lax »

Athomas hat geschrieben:
Fr Jan 03, 2020 11:17 am
Eine leicht veränderte Version klappt bei mir ohne Probleme - und fix:

Code: Alles auswählen

Zahl <- paste(sample(0:9, 10000000, replace=TRUE), collapse="")
write.table(Zahl, "D:/temp/Zahl.txt", row.names=FALSE, col.names=FALSE, quote=FALSE)

Zahl.str <- scan(file="D:/temp/Zahl.txt", what=character(), flush=TRUE)
Zahl == Zahl.str
Hallo Athomas, das hilft mir leider nicht. Die Datei besteht aus den ersten 10 Millionen Nachkommastellen von Pi. Ich möchte, dass
lax hat geschrieben:
Do Jan 02, 2020 5:47 pm
diese 10 Millionen Zahlen in einen Vektor mit 10 Millionen Elementen "gepackt" werden.
und keine 10 Millionen Zufallszahlen. Immer wenn ich mit scan versuche einzulesen, dann macht er diesen Vektor mit genau einem Element und den möchte ich aufsplitten. Wenn ich deine Version versuche, schmiert mir der Rechner sowohl bei Zahl.str,als auch bei Zahl ab (oder braucht ewig).

LG lax

Athomas
Beiträge: 327
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Text-Datei als Vektor einlesen

Beitrag von Athomas »

lax, mein Gudster, ich habe Dein 10 Mio-Pi nicht und musste mir mit einer Folge von 10 Mio zufälligen Ziffern behelfen.
Die habe ich gespeichert und völlig problemlos wieder eingelesen.
Da ich nicht glaube, dass R Pi erkennt und dann bockig wird, sollte es eigentlich auch bei Dir klappen!

Wenn nicht, ist mit Deinen Daten etwas anders als in meinem Beispiel - da meine Glaskugel gerade in Wartung ist, kann ich Dir aber nicht sagen, was...
Zur Not müsstest Du Dein Pi (oder ein ausreichend langes Anfangsstück) hier mal zeigen!

Ergänzung: Auf meinem Raspberry Pi 4 (allerdings mit satten 4GB RAM) dauert das Einlesen von der micro-SD-Karte 0.45 sec.

lax
Beiträge: 4
Registriert: Do Jan 02, 2020 5:37 pm

Re: Text-Datei als Vektor einlesen

Beitrag von lax »

Hey Athomas,

ich weiß jetzt mittlerweile was du gemacht hast, aber das war leider nicht das Resultat, das ich erzielen wollte. Den Vektor selbst konnte ich auch schon einlesen. Aber meine Intention ist es nun, diesen Vektor aufzuteilen (dass er nicht mehr die Länge 1 hat) und jede einzelne Zahl der Nachkommastellen von Pi (oder der Zahlen, die du mit paste zusammengefügt hast) ein einzelnes Element in diesem Vektor ist. Ich hoffe, jetzt ist klar, welches Ergebnis ich erzielen will. Danke schon mal für eure Gedanken bisher.

Lg lax

Athomas
Beiträge: 327
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Text-Datei als Vektor einlesen

Beitrag von Athomas »

Code: Alles auswählen

library(stringr)
Ergebnis <- as.vector(str_split_fixed(Zahl.str, pattern = "", n = nchar(Zahl.str)))
Aber ich frage mich, was der Sinn dieser Aktion ist - die Teile eines Strings sind doch durch die bekannten Zeichenketten-Operationen bequem zugreifbar!

Benutzeravatar
student
Beiträge: 374
Registriert: Fr Okt 07, 2016 9:52 am

Re: Text-Datei als Vektor einlesen

Beitrag von student »

Hallo lax,

ich finde es auch immer ganz spannend, wenn man sich mit erwähnten Paketen oder Funktionen vertraut macht. Gerade das Paket stringr hilft weiter, wenn ein Objekt , das Elemente ohne Trennzeichen enthält, in einzelne Elemente separiert werden soll. ;)
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)

bigben
Beiträge: 1271
Registriert: Mi Okt 12, 2016 9:09 am

Re: Text-Datei als Vektor einlesen

Beitrag von bigben »

Natürlich kann man ohne fremde Pakete vieles auch in Standard-R selbst programmieren. Das hier funktioniert beispielsweise mit 10000 Zeichen flott, mit 100.000 akzeptabel, mit 1 Mio länger, als die meisten Nerv haben, von 10 Mio ganz zu schweigen:

Code: Alles auswählen

vereinzel <- function(string)
     sapply(1:nchar(string), function(i) substr(string, i, i))

vereinzel("1234567890098765432112345678900987654321")
# bzw
as.integer(vereinzel("1234567890"))

# mit langer Zufallsfolge

test <- paste(sample(0:9, 1000, replace=TRUE), collapse="")
vereinzel(test)
Packageautoren stecken da ganz andere Zeit in die Optimierung. Der Thread wird aber halt nicht besser, wenn Athomas Vorschlag, die Daten zu zeigen und Students Vorschlag, sich ein Paket anzuschauen, jeweils ignoriert wird.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

Hufeisen
Beiträge: 139
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Text-Datei als Vektor einlesen

Beitrag von Hufeisen »

Oha, kann es sein, dass du auf meinen inzwischen gelöschten Beitrag geantwortet hast? Ich fand den nicht sehr hilfreich und habe ihn wieder entfernt.

Antworten