2017-01-02 4 views
0

Я попытался заменить цикл for на apply цикл в существующем сценарии R. Тем не менее, моя старая функция возвращает несколько списков dataFrames, таких как return(list(df1,df2)). Для некоторых деталей, пример представлен ниже:R применить цикл с возвратным списком

Старый Сценарий:

MyFunction = function(input){ 
    df1=array(NA,c(0,1)) 
    df2=array(NA,c(0,1)) 
    for(i in 1:n){ 
    ... 
    df1 = rbind(df1,action1(input)) 
    df2 = rbind(df2,action2(input)) 
    } 
return(list(df1,df2)) 

New Script:

Object = do.call(rbind, lapply(1:n,function(i){ 
    df1 = action1(input) 
    df2 = action2(input) 
    return(list(df1,df2)) 
})) 

я получаю:

 [,1] [,2] [,3] [,4] [,5] 
[1,] List,2 List,2 List,2 List,2 List,2 
[2,] List,2 List,2 List,2 List,2 List,2 
[3,] … 

Я понятия не имею, чтобы решить моя проблема. Любая помощь будет оценена.

Благодаря достижениям в

,

B.Gees

+0

Что такое * action1() * и * action2() *? И это не кадры данных в первой функции, а массивы, две очень разные структуры данных. – Parfait

+0

Извините, мой пример не является выразительным. Я использовал '...' для разных действий из входных данныхFrame и 'action1' и' action2' для двух разных вычислений на моем преобразованном DataFrame. Я согласен с вами в отношении дифференциации между 'array' и dataFrame, но для меня это простое решение для инициализации dataFrame и получения хороших заголовков столбцов путем простой конкатенации первого результата dataFrame. –

ответ

0

do.call(rbind, ...) обычно используется для связывания строки список фреймов данных/матриц. У вас есть список списка фреймов данных, и вы хотите связать их соответственно, вы можете попробовать следующий шаблон.

Object = do.call(Map, c(f = rbind, lapply(1:n,function(i){ 
    df1 = action1(input) 
    df2 = action2(input) 
    return(list(df1,df2)) 
}))) 

do.call(Map, ...) проходит все списки, возвращенные lapply в качестве аргументов Map, которые затем передают все кадры данных из одних и тех же позиций rbind. то есть все df1 будут связаны вместе, и все df2 будут связаны вместе.

+0

Я тестирую, и он работает. Большое спасибо Psidom. –

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