2016-10-19 2 views
0

В настоящее время я пишу довольно большую функцию для конкретного сюжета. Я хотел бы сохранить все объекты, созданные функцией, для устранения ошибок, но мой веб-поиск до сих пор не увенчался успехом.Могу ли я сохранить временную среду функции в R?

Быстрая визуализация. Пусть

fun <- function(x) { 
    y <- x+1 
    z <- y^2 
    z*4 
} 

fun(2) 
[1] 36 

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

Заранее благодарен!

+0

Нравится? 'fun <- function (x) {y <- x + 1; z <- y^2; return (list (y, z, z * 4))} ' – count

+1

Для отладки используйте' browser() 'this funcions помещает вас в интерактивный сеанс, где он вызывается. Вы можете исследовать и даже изменять переменные в области функций там. – snaut

+0

Согласен с @snaut. Какие объекты вы хотите сохранить для устранения неполадок? Временный или постоянный? Какие значения этих объектов? Заключительный или промежуточный? Вам лучше начать сеанс отладки. Современные R IDE, такие как RStudio, делают это очень простым. – tchakravarty

ответ

1

Вы можете вернуть объекты в списке или назначить переменные внутри функции с

assign("x", x, envir = .GlobalEnv) 
+0

Спасибо, это будет полезно! – LAP

1

Аналогично ответ от @ 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 

Там очень много, чтобы узнать о среде, которые могут быть полезны для написания длинных функций и т.д., так что это просто верхушка айсберга.

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