readLines убивает R в мурлыкании :: карта - PullRequest
0 голосов
/ 10 декабря 2018

Я продолжаю терять сеанс * в консоли, когда пытаюсь выполнить readLines (из базы) с картой (из purrr).

* Не получить новую строку, и R, кажется, неработает что-нибудь

Если я введу вектор путей к файлам:

paths <- c("a/file.csv", "a/nother_file.csv")

И попробую вывести все верхние строки с map и readLines, R умрет.

result <- map(paths, readLines(n = 1))

Но если я сделаю:

result <- map(1:2, function(x) readLines(paths[x], n = 1))

Это работает.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Решение уже опубликовано.Вот краткое объяснение того, что происходит в вашем случае:

Чтобы использовать purrr::map, вы должны передать ему функцию .Но readLines(n = 1) не функция, это выражение вызова функции .Это совсем другое: в качестве другого примера, sum - это функция , sum(1 : 10) - это выражение вызова функции, которое оценивается как целочисленное значение 55. Но sum, само по себе, оцениваетto… себя: функция, которую можно вызывать (и вы не можете вызвать sum(1 : 10): это просто целое число).

Когда вы пишете readLine(n = 1), эта функция вызывается сразу, когда mapназывается - не по purrr по данным , а скорее так, как оно есть.То же самое происходит, если вы вызываете readLines(n = 1) напрямую, не заключая его в map(…).

Но это не убивает сеанс R.Вместо этого он говорит readLines читать из файла, который указан по умолчанию.Глядя на документацию функции, мы видим:

readLines(con = stdin(), n = -1L, ok = TRUE, warn = TRUE,
          encoding = "unknown", skipNul = FALSE)

con = stdin() - по умолчанию readLines читает со стандартного ввода.В интерактивном терминале это блокируется до тех пор, пока стандартный ввод (то есть интерактивный терминал) не отправит команду «конец файла».В большинстве командных строк вы можете смоделировать это, нажав комбинацию клавиш Ctrl + D .Внутри RStudio поведение может быть другим.

0 голосов
/ 10 декабря 2018

это будет работать:

result <- map(paths, readLines, n = 1)

из `? Purrr :: map

Usage
map(.x, .f, ...)
... Additional arguments passed on to .f.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...