Seite 1 von 2

Text-Datei als Vektor einlesen

Verfasst: Do Jan 02, 2020 5:47 pm
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

Re: Text-Datei als Vektor einlesen

Verfasst: Fr Jan 03, 2020 9:25 am
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.

Re: Text-Datei als Vektor einlesen

Verfasst: Fr Jan 03, 2020 11:17 am
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

Re: Text-Datei als Vektor einlesen

Verfasst: Fr Jan 03, 2020 3:05 pm
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

Re: Text-Datei als Vektor einlesen

Verfasst: Fr Jan 03, 2020 3:17 pm
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.

Re: Text-Datei als Vektor einlesen

Verfasst: Fr Jan 03, 2020 9:36 pm
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

Re: Text-Datei als Vektor einlesen

Verfasst: Fr Jan 03, 2020 10:12 pm
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!

Re: Text-Datei als Vektor einlesen

Verfasst: Sa Jan 04, 2020 9:41 am
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. ;)

Re: Text-Datei als Vektor einlesen

Verfasst: Sa Jan 04, 2020 8:41 pm
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

Re: Text-Datei als Vektor einlesen

Verfasst: So Jan 05, 2020 12:41 pm
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.