2016-10-09 15 views
1

私は、SampleDfとsampleDF2を一緒にリストバインドし、次に2つの文字ベクタをcbindするコードを以下に示します。私がしたいのは、別のサンプルのDF3、Recipe3、および成分のリストを渡して、同様にrbindとcbindさせる機能を作成することです。 lapplyやdo.callのようにこれを行う簡単な方法はありますか?私の最終目標は、関数にsampleDF、Recipe、およびingredientsのリストを渡し、それらのすべてのrbindとcbindを以下の例のように一緒にさせることです。rbindとcbindが一緒にリストアップする

Code: 
try1<-cbind(cbind(RecipeName<-c("Recipe1","Recipe2"),ingredients<-c("","Beans")) 
      ,rbind(
        SampleDf 
       ,sampleDf2 

       ) 
      ) 


Data: 

dput(SampleDf) 
structure(c(45.8490717149901, 75.6532220962743, 49.4757541141121, 
21.7923657299986, 153.255016847245), .Dim = c(1L, 5L), .Dimnames = list(
    "Test set", c("ME", "RMSE", "MAE", "MPE", "MAPE"))) 

dput(sampleDf2) 
structure(c(-1.39930351254246, 65.1992541962796, 46.5664097914753, 
-364.369685854671, 412.539393211685), .Dim = c(1L, 5L), .Dimnames = list(
    "Test set", c("ME", "RMSE", "MAE", "MPE", "MAPE"))) 

dput(sampleDf3) 
structure(c(0, 65.1992541962796, 1, 
-364.369685854671, 10), .Dim = c(1L, 5L), .Dimnames = list(
    "Test set", c("ME", "RMSE", "MAE", "MPE", "MAPE"))) 
+0

をあなたは 'それは、すべての文字列であるtry1'からの出力を見れば。あなたが望んでいたものではないと思いますよね。 'sample'データセットを' list'に入れ、 'data.frame'に変換して' do.call(rbind'すなわち 'res < - do.call(rbind、lapply(mget(ls(pattern =" (?i)SampleDf \\ d * "))、as.data.frame))' – akrun

答えて

1

次の操作を行うことができます:

require(dplyr) 
bind_all <- function(rows, cols){ 
    rows <- lapply(rows, as.data.frame) 
    cols <- vapply(cols, as.data.frame, list(1)) 
    bind_cols(bind_rows(rows), cols) 
} 

bind_all(list(SampleDf, sampleDf2), 
     list(RecipeName=c("Recipe1","Recipe2"),ingredients=c("","Beans"))) 

あなたを与える:

  ME  RMSE  MAE  MPE  MAPE RecipeName ingredients 
1 45.849072 75.65322 49.47575 21.79237 153.2550 Recipe1    
2 -1.399304 65.19925 46.56641 -364.36969 412.5394 Recipe2  Beans 
関連する問題