Как вы импортируете простой текстовый файл как односимвольную строку в R? Я думаю, что это, вероятно, будет очень простой ответ, но когда я попробовал это сегодня, я обнаружил, что не могу найти функцию для этого.
Например, предположим, у меня есть файл foo.txt
с чем-то, что я хочу textmine.
Я попробовал это с:
scan("foo.txt", what="character", sep=NULL)
но это все равно вернуло вектор. Я получил это работает с:
paste(scan("foo.txt", what="character", sep=" "),collapse=" ")
но это довольно уродливое решение, которое, вероятно, тоже нестабильно.
readr::read_file
теперь решает эту проблему красиво.Ответы:
Вот вариант решения от @JoshuaUlrich, который использует правильный размер вместо жесткого размера:
Обратите внимание, что readChar выделяет пространство для указанного количества байтов, поэтому
readChar(fileName, .Machine$integer.max)
не работает хорошо ...источник
В случае, если кто-то еще будет рассматривать этот вопрос 3 года спустя, в пакете readr Хэдли Уикхэма есть удобная
read_file()
функция, которая сделает это за вас.источник
readr
. Я обновил ответ соответственно - надеюсь, Шарон не против.could not find function "pase"
по этому кодуЯ бы использовал следующее. Это должно работать просто отлично, и не кажется уродливым, по крайней мере, мне:
источник
collapse="\n"
бы повторить тот факт, что это отдельные строки в исходном файле. С этим изменением это решение будет одинаково хорошо работать для сжатых и несжатых файлов.blocking=TRUE
к текстовым файлам по умолчанию, поэтомуreadLines()
вернет полный файл только с предупреждением о пропущенном символе EOL. Однако комментарий @ gvrocha заслуживает внимания: поймите, какой у вас тип подключения!If 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.**
Как насчет:
источник
В пакете readr есть функция, которая сделает все за вас.
Это заменяет версию в пакете stringr.
источник
Жаль, что решение Шарона больше нельзя использовать. Я добавил решение Джоша О'Брайена с модификацией asieira в мой файл .Rprofile:
и использовать его как это:
txt = read.text('path/to/my/file.txt')
. Я не смог воспроизвести находку Бампкина (28 окт. 14) иwriteLines(txt)
показал содержаниеfile.txt
. Также послеwrite(txt, '/tmp/out')
команды неdiff /tmp/out path/to/my/file.txt
сообщалось о различиях.источник
readChar не обладает большой гибкостью, поэтому я объединил ваши решения (readLines и paste).
Я также добавил пробел между каждой строкой:
источник
Кажется, ваше решение не так уж и плохо. Вы можете использовать функции и сделать его профессиональным, как эти способы
источник