Кажется, вы поняли, что sink
делает: он захватывает выход и записывает его в файл. Он не отображает неоцененные выражения R, которые вы хотите сделать.
Чтобы зафиксировать неоцененное выражение R, его необходимо обернуть внутри quote
или использовать аналогичный механизм. Для использования вашего примера:
quoted_expr = quote(sapply(iris, class))
В настоящее время quoted_expr
содержит выражение R. Далее, вам нужно, чтобы преобразовать его в строковое представление кода R:
code_representation = deparse(quoted_expr, backtick = TRUE)
backtick = TRUE
не является строго необходимым, но здесь это хорошая практика, чтобы всегда использовать его, потому что есть некоторые случаи, когда это необходимо.
Наконец, мы можем записать этот код представления в файл:
writeLines(code_representation, 'code.r')
Теперь, приведенный выше пример написал выражение фиксированного R в файл. Мы могли бы использовать строку символов повсюду. Но использование цитированного выражения вместо символьной строки дает нам возможность изменять код «на лету», без необходимости обманывать строку (подверженность ошибкам и неэффективность). Например, мы могли бы позволить пользователю решить, какой data.table работать на:
dataset_name = 'mtcars' # Modify to your heart’s content
quoted_expr = substitute(sapply(dataset, class),
list(dataset = as.name(dataset_name)))
# `quoted_expr` is now:
sapply(mtcars, class)
... и т.д.
Вы можете создать файл, а затем отредактировать его из R консоли, выполнив: 'file.create ('foo.R') file.edit ('foo.R') '. –
Я просто попытался использовать 'writeLines()' и 'file()', похоже, что он работает. Позвольте мне проверить, добавив больше команд и поиска. –
Вот небольшой пример. с помощью 'writelines: fileConn <-file (" foo.R "); writeLines (paste (" sapply ("," iris, "," class) "), fileConn); close (fileConn); source ('foo.R ') ' –