2016-12-23 6 views
2

特定のベクトル値に基づいてループを実行する必要があります。いくつかの例のコードとデータを以下に示す:ベクトル要素に基づいてループを実行する

list_store <- list() 
vec <- c(3,2,3) 
data_list <- lapply(list(head(mtcars,10), head(mtcars,15), head(mtcars,20), head(mtcars, 9), 
         head(mtcars,14), head(mtcars,18), head(mtcars,20), head(mtcars,10)), 
        function(x) rownames_to_column(x)) 
data_list1 <- lapply(list(head(mtcars,7), head(mtcars,8), head(mtcars,10)), function(x) rownames_to_column(x)) 
result <- lapply(data_list, function(i){ 
    list_store[[length(list_store) + 1]] <- merge(i, data_list1[[1]], all.y = TRUE) 
}) 

上記のコードは私が最終的にdata_list1との第二のファイルと、data_list1の最初のファイルでdata_list次の2つのファイルをdata_listの最初の3つのファイルをマージしたいということです他の3つのファイルはdata_listで、第3のファイルはdata_list1です。私のコードでは、私がdata_list1の最初のファイルとdata_listのすべてのファイルをマージするが、私は、iの追跡ループを持っているjというように、すべてのプロセスを行うことを可能vec

ごとにdata_list1を変更したいです効率的な方法があるかどうかを知りたい。

答えて

2

我々は「VEC」の配列により「VEC」をreplicate、3つのlist要素それぞれがlistを有するにsplit「DATA_LIST」にそれを使用。その後、通常のlist構造に戻って、ネストされたlistを変換するcを使用し、「data_list1」の要素とlapplymergeを持つネストされたlist介して対応listsplitデータセットからの要素と「data_list1」、ループを通過するMapを使用'data_list'。

do.call(c, 
    Map(function(x,y) lapply(x, function(dat) 
          merge(dat, y, all.y = TRUE)), 
     split(data_list, rep(seq_along(vec), vec)), 
      data_list1)) 
+0

ありがとうございます...少し説明が参考になります。 –

+0

@AaghazHussainありがとう、説明を追加 – akrun

+1

私は 'R'伝説の@akrunを言うことができます: –

関連する問題