#r #function
#r #функция
Вопрос:
В настоящее время я пишу довольно большую функцию для определенного графика. Я хотел бы сохранить все объекты, созданные функцией, по причинам исправления ошибок, но мой поиск в Интернете пока не увенчался успехом.
Быстрая визуализация. Предположим
fun <- function(x) {
y <- x 1
z <- y^2
z*4
}
fun(2)
[1] 36
В этом простом случае я хотел бы сохранить y и z в доступной среде, чтобы иметь возможность понимать, какие результаты дают определенные этапы моей функции.
Заранее спасибо!
Комментарии:
1. Вот так?
fun <- function(x) { y <- x 1 ; z <- y^2 ; return(list(y,z,z*4)) }
2. Для использования при отладке
browser()
эта функция помещает вас в интерактивный сеанс, где бы он ни вызывался. Вы можете исследовать и даже изменять переменные в области функций там.3. Согласен с @snaut. Какие объекты вы хотите сохранить для исправления ошибок? Временная или постоянная? Какие значения этих объектов? Окончательный или промежуточный? Вам лучше запустить сеанс отладки. Современные R IDE, такие как RStudio, делают это очень простым.
4. Спасибо, я не знал об
browser()
опции. Возврат всех объектов в список займет довольно много времени, так как функция действительно большая. Собираюсь попробовать использоватьbrowser()
или назначить определенные объекты . GlobalEnv. Спасибо вам всем за помощь!
Ответ №1:
Вы могли бы вернуть объекты в списке или назначить переменные внутри функции с
assign("x", x, envir = .GlobalEnv)
Комментарии:
1. Спасибо, это будет полезно!
Ответ №2:
Аналогично ответу от @user116, существует специальный оператор для достижения того, чего вы хотите.
Это ярлык для функции присваивания, использующий <<-
оператор. Проверьте help("<<-")
для получения дополнительной информации. Но в принципе, вы могли бы «сохранить» y
и z
в глобальной среде, выполнив это:
# Make sure that these do not exist first.
stopifnot( all( !exists("y"), !exists("z")))
fun <- function(x) {
y <<- x 1
z <<- y^2
z*4
}
fun(2)
# Verify y and z exist now.
stopifnot( all( exists("y"), exists("z")))
y
z
О средах нужно многое узнать, что может быть полезно для написания длинных функций и т.д., Так что это только верхушка айсберга.