[A]
Если каждый из foo и bar является одним числом, то с c нет ничего плохого (foo, bar); и вы также можете назвать компоненты: c (Foo = foo, Bar = bar). Таким образом, вы можете получить доступ к компонентам результата 'res' как res [1], res [2]; или, в именованном случае, как res ["Foo"], res ["BAR"].
[B]
Если foo и bar являются векторами одного типа и длины, то, опять же, нет ничего плохого в возврате cbind (foo, bar) или rbind (foo, bar); также можно назвать В случае 'cbind' вы можете получить доступ к foo и bar как res [, 1], res [, 2] или как res [, "Foo"], res [, "Bar"]. Вы также можете предпочесть вернуть фрейм данных, а не матрицу:
data.frame(Foo=foo,Bar=bar)
и получите к ним доступ как res $ Foo, res $ Bar. Это также будет хорошо работать, если foo и bar имеют одинаковую длину, но не одного типа (например, foo - это вектор чисел, а bar - вектор символьных строк).
[С]
Если foo и bar достаточно разные, чтобы их не было удобно комбинировать, как указано выше, тогда вы обязательно должны вернуть список.
Например, ваша функция может соответствовать линейной модели и
также рассчитать прогнозные значения, чтобы вы могли иметь
LM<-lm(....) ; foo<-summary(LM); bar<-LM$fit
и затем вы бы return list(Foo=foo,Bar=bar)
и затем получили доступ к сводке как res $ Foo, прогнозируемые значения как res $ Bar
источник: http://r.789695.n4.nabble.com/How-to-return-multiple-values-in-a-function-td858528.html