Jak zaimportować zwykły plik tekstowy jako ciąg jednego znaku w R? Myślę, że prawdopodobnie będzie to bardzo prosta odpowiedź, ale kiedy spróbowałem tego dzisiaj, stwierdziłem, że nie mogę znaleźć funkcji, która by to zrobiła.
Załóżmy na przykład, że mam plik foo.txt
z czymś, co chcę wysłać SMS-em.
Próbowałem z:
scan("foo.txt", what="character", sep=NULL)
ale to wciąż zwróciło wektor. Mam trochę pracy z:
paste(scan("foo.txt", what="character", sep=" "),collapse=" ")
ale jest to dość brzydkie rozwiązanie, które prawdopodobnie również jest niestabilne.
readr::read_file
ładnie rozwiązuje ten problem.Odpowiedzi:
Oto wariant rozwiązania @JoshuaUlrich, który używa poprawnego rozmiaru zamiast rozmiaru zakodowanego na stałe:
Pamiętaj, że readChar przydziela miejsce dla określonej liczby bajtów, więc
readChar(fileName, .Machine$integer.max)
nie działa dobrze ...źródło
W przypadku, gdy ktoś nadal patrzy na to pytanie 3 lata później, pakiet czytnika Hadley Wickham ma przydatną
read_file()
funkcję, która zrobi to za Ciebie.źródło
readr
. Odpowiednio zaktualizowałem odpowiedź - mam nadzieję, że Sharon nie ma nic przeciwko.could not find function "pase"
ten kodUżyłbym następujących. Powinno działać dobrze i przynajmniej nie wydaje mi się brzydkie:
źródło
collapse="\n"
się powtórzyć fakt, że są to osobne wiersze oryginalnego pliku. Dzięki tej zmianie to rozwiązanie będzie działać równie dobrze dla skompresowanych i nieskompresowanych plików.blocking=TRUE
Domyślnie połączenia plików tekstowych, więcreadLines()
zwróci pełny plik tylko z ostrzeżeniem o brakującym znaku EOL. Jednak komentarz @ gvrocha jest wart uwagi: zrozum typ połączenia! Pomoc readLines mówiIf the final line is incomplete (no final EOL marker) the behaviour depends on whether the connection is blocking or not. For a non-blocking text-mode connection the incomplete line is pushed back, silently. **For all other connections the line will be accepted, with a warning.**
Co powiesz na:
źródło
Pakiet readr ma funkcję, która zrobi wszystko za Ciebie.
Zastępuje to wersję w pakiecie stringr.
źródło
Szkoda, że nie można już użyć rozwiązania Sharon. Dodałem rozwiązanie Josha O'Briena z modyfikacją asieiry do mojego pliku .Rprofile:
i używać go tak:
txt = read.text('path/to/my/file.txt')
. Nie mogłem powtórzyć znaleziska bumpkina (28 października 14) iwriteLines(txt)
pokazałem zawartośćfile.txt
. Ponadto powrite(txt, '/tmp/out')
poleceniudiff /tmp/out path/to/my/file.txt
nie zgłoszono żadnych różnic.źródło
readChar nie ma dużej elastyczności, więc połączyłem twoje rozwiązania (readLines i wklej).
Dodałem również spację między każdą linią:
źródło
Wygląda na to, że twoje rozwiązanie nie jest zbyt brzydkie. Możesz korzystać z funkcji i uczynić go profesjonalnym w taki sposób
źródło