2013-07-17 4 views
1

Допустим, я хочу использовать мойку для записи в файл в R.вопросы о раковине, в R

sink("outfile.txt") 
cat("Line one.\n") 
cat("Line two.") 
sink() 

вопрос 1. Я видел людей, пишущих мойку() в конце концов, почему мы должны это? Может что-то пойдет не так, когда у нас этого нет?

вопрос 2. Каков наилучший способ написать много строк один за другим для записи с помощью цикла for, где вам также нужно отформатировать каждую строку? То есть я, возможно, придется иметь различное число в каждой строке, как в Python Я хотел бы использовать outfile.write («линия с номером% .3f», 1.231) и т.д.

+1

Я предпочитаю быть явным и использовать 'cat (..., file =., Append = TRUE)' для записи в файл и, таким образом, избегать 'sink' вообще. Также см. 'WriteLines'. –

+1

Для первого вопроса - проверьте третий абзац в разделе «Сведения» в разделе «? Sink» – Dason

ответ

3

Вопрос 1: В sink функция перенаправления весь текст идет в поток stdout к файловому обработчику, который вы даете sink. Это означает, что что-нибудь, которое обычно печатается в вашей интерактивной сессии R, теперь вместо этого будет записано в файл в раковине, в данном случае «outfile.txt». Когда вы вызываете sink снова без каких-либо аргументов, вы говорите ему, чтобы возобновить использование stdout вместо «outfile.txt». Так что нет, ничего не получится, если вы не назовете sink() в конце, но вам нужно использовать его, если вы хотите снова увидеть результат в своей сессии R/

Как отметил @Roman, это лучше явно указать cat для вывода в файл. Таким образом, вы получаете только то, что хотите, и ожидаете увидеть в файле, оставаясь при этом остальным на выходе в сеансе R.

Вопрос 2: Это также отвечает на вопрос два. R (насколько мне известно) не имеет прямой обработки файлов, как в python. Вместо этого вы можете просто использовать cat(..., file="outfile.txt") внутри цикла for.

+0

Спасибо, но когда я, например, пишу: cat («Линия% d. \ N», 1, file = «outy.txt») cat ("Line% d.", 2, file = "outy.txt", append = T) Кажется, он не получает формат, нет какой-либо функции printf, которую я могу использовать? – user2592222

+0

@ user2592222 'cat (" Строка 1. \ n ", file =" outy.txt ")', 'cat (" Строка 2. \ n ", file =" outy.txt) 'и т. Д., Если вы печатаете переменная 'cat (" Линия ", x,". \ n ", sep =" ", file =" outy.txt ")'. Также см. '? sprintf' и'? formatC' для большего форматирования –

+0

String printing doesn Так работает в R, как в C. Функция, которую вы ищете, это 'sprintf', но это не нужно, так как cat сам будет обрабатывать конкатенацию типов. ' cat (sprintf ("Line% d . \ n ", 1), file =" outy.txt ")' равнозначно 'cat (" Line ", 1,". \ n ", file =" outy.txt ")'. Вы также можете указать разделитель между аргументами в cat с помощью аргумента 'sep'. –

Смежные вопросы