2015-11-26 3 views
1

У меня есть несколько функций и вы хотите передать их результаты другой функции (несколько вызовов функций). Каков R-способ сделать это?Передача результатов различных функций функции R путь

Ex.

x = function_x() { ... return vector} 
y = function_y() { ... return vector} 
z = function_z() { ... return vector} 
func_abc(x) 
func_abc(y) 
func_abc(z) 

В настоящее время я создаю вектор функций и использования lapply передать свои результаты на многочисленные функции вызовов:

function_x() { ... return vector} 
function_y() { ... return vector} 
function_z() { ... return vector} 

my_vectors <- c(function_x(), function_y(), function_z()) 

lapply(my_vectors, function_abc(v) { 
    ... do something on v 
}) 

Чтобы быть более конкретным, function_x, _y и _z возвращает векторы. Я хочу сделать некоторую фильтрацию для возвращаемых векторов, которая является моей function_abc. Затем объедините их.

+0

Я не понимаю, что ваши пытаются достичь. –

+0

Мне кажется, вам нужен список - 'my_vectors <- list (function_x(), function_y(), function_z())' – zx8754

+0

В принципе, что такое «R-way» для нескольких вызовов для функции (скажем, function_abc). Для каждого вызова я передаю значение из разных функций (например, function_x(), function_y(), function_z()). – arkisle

ответ

0

Попробуйте этот пример:

#set seed to make it reproducible 
set.seed(1234) 

#define functions 
function_x <- function(){ sample(1) } 
function_y <- function(){ sample(2) } 
function_z <- function(){ sample(3) } 

#get function results into a list 
myList <- list(function_x(), function_y(), function_z()) 

#loop through the list and row bind 
do.call(rbind, 
    lapply(myList, function(v) { 
    #some calculations, result is a data.frame 
    res <- cbind.data.frame(input=v, calculation=v*2) 
    return(res) 
    })) 

#result 
# input calculation 
#1  1   2 
#2  2   4 
#3  1   2 
#4  2   4 
#5  3   6 
#6  1   2 

Выше может быть упрощена, как показано ниже:

#define function for calculations 
function_abc <- function(x){ x * 2 } 

#loop 
unlist(lapply(list(function_x(), function_y(), function_z()), function_abc)) 

#result 
# [1] 2 4 2 4 6 2 
Смежные вопросы