2016-02-12 2 views
1

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

grinder <- function(x) { 

if(x == "BID") { 
miles <- 18.4 * n.row 
tolls <- 1.8 * n.row 

} else if(x == "SPR") { 
miles <- 10.8 * n.row 
tolls <- 0 

} else if (x == "BRI") { 
miles <- 3.8 * n.row 
tolls <- 0 

} else if (x == "GOO") { 
miles <- 66.2 * n.row 
tolls <- 1.8 * n.row 

} else if (x == "MIL") { 
miles <- 108 
tolls <- 0 

} else if (x == "SMH") { 
miles <- 94.6 * n.row 
tolls <- 2 * n.row 

} 

mil.tol <- list(miles,tolls) 
return(mil.tol) 

} 

grinder(x) 

Правильные значения возвращаются, но я не могу получить доступ mil.tol сделать что-нибудь с этими значениями. Я также не могу получить правильные значения миль или дорожных сборов. Консоль возвращает это:

> mil.tol 
Error: object 'mil.tol' not found 
> miles 

Любые предложения?

+1

mil.tol <- дробилка (x), а затем получить к нему доступ – grubjesic

+0

Вы должны ожидать, что «дробилка» будет работать как любая нормальная функция R. Это означает, что он не просто «создает» объекты для вас, вы назначаете результат объекту. Если вы запустили линейную модель 'lm (mpg ~ wt, data = mtcars)' было бы ужасно **, если бы это создало объект в вашей рабочей области под названием «model» - вы никогда не могли работать с более чем одной моделью вовремя. Так же, как вы привыкли к именованию и присваиванию своих моделей 'mod1 <- lm (...)', вам нужно указать и назначить вывод своей функции: 'mil.tol <- grinder (x)' – Gregor

ответ

0

miles, tolls и mil.tol все местные функции и не возвращаются, но вы можете назначить выход функции (т.е. от return()), как показано ниже, чтобы mil.tol:

mil.tol <- grinder(x) 

бы рекомендуем также прочитать это сообщение SO here