2017-07-03 17 views
0

Rの関数ごとに3回以上、10以上の関数を繰り返します。それは非常に混乱し、私の時間を無駄にしています。私は適用機能の考え方を理解していますが、非常に基本的なものであり、この問題に関する助けが必要です。rの引数が複数ある関数のリストでapply関数を使用するにはどうすればよいですか?

私は、これらの機能(私の全体の機能の一部を)持っている:

sel_1 <- lower.tri(fam1) # selector for lower triangular matrix 
    if (check.pars & (any(fam1 != 0) | any(!is.na(par11)))) { 
      BiCopCheck(fam1[sel_1], par11[sel_1], par21[sel_1], call = match.call()) 
    } 
    sel_2 <- lower.tri(fam2) 
    if (check.pars & (any(fam2 != 0) | any(!is.na(par11)))) { 
      BiCopCheck(fam2[sel_2], par12[sel_2], par22[sel_2], call = match.call()) 
    } 
    sel_3 <- lower.tri(fam3) 
    if (check.pars & (any(fam3 != 0) | any(!is.na(par13)))) { 
      BiCopCheck(fam3[sel_3], par13[sel_3], par23[sel_3], call = match.call()) 
    } 


    MixRVM1 <- list(Matrix = Matrix, 
      fam1 = fam1, 
      par11 = par11, 
      par21 = par21, 
      names = names, 
      MaxMat = MaxMat, 
      CondDistr = CondDistr) 
    MixRVM12 <- list(Matrix = Matrix, 
      fam2 = fam2, 
      par12 = par12, 
      par22 = par22, 
      names = names, 
      MaxMat = MaxMat, 
      CondDistr = CondDistr) 

は、これらの機能を繰り返す簡単な方法はありますか?

+0

あなたはmapply機能 –

+1

は、すべての10個の機能を入れて使用することができます一つの関数で? – Jimbou

+0

6行目にタイプミスがありますが、is.na(par12)ではありませんか?また、MaxMat1やConDistr1などに同じ値を3回割り当てているようです。データが構造化されていない場合、オブジェクト構造を利用する関数を使用することはできません。 –

答えて

3

それはデータなしでは難しいですが、これらの原則に従うことによって、あなたのコードを改善することができるはずです。

すでにきちんと形式でFAMとパー変数を持っていない場合は(あなた場合はそのあなたがすべき)それを管理している:

fam_variables <- grep("fam[0-9]",ls(),value=TRUE) 
fam_variables <- sel_variables[order(sapply(fam_variables,function(x){as.numeric(substr(x,4,nchar(x)))}))] 
fam <- lapply(fam_variables,get) # assuming there's no missing sel variable from 1 to n! 
par_list <- list(list(par11,par12,par13),list(par21,par22,par23)) 

その後、あなたはこれらのリスト上の関数を適用し使用することができます。

sel <- lapply(fam,lower.tri) 
sapply(1:3,function(i){BiCopCheck(fam[[i]][sel[[i]]], par_list[[1]][[i]][sel[[i]]], par_list[[2]][[i]][sel[[i]]], call = match.call())}) 

MixRVM <- list() # we create a list, and we'll keep the same structure for every item (so the name will be the same among elements) 
for (i in 1:2){ 
    MixRVM[[i]] <- list(Matrix = Matrix, 
          fam = fam[[i]], 
          par1i = par_list[[1]][[i]], 
          par2i = par_list[[2]][[i]], 
          names = names, 
          MaxMat = MaxMat, 
          CondDistr = CondDistr) 
} 
+0

ありがとう、私はまだデータがありません。これらの行列を設定し、データをシミュレートする必要があります。私はそれを試して見てください。 – Alice

+1

私は 'fam_variables'の考えを得ることができませんでした。 – Alice

+0

あなたはfam1、fam2、fam3という名前の変数をいくつか持っています(私はこれらの変数が何であるかわかりません)。同じ "kind"の値を持つときは、それらは、data.framesやリストのような構造化されたデータの中にあります。私の最初の行は、 "famと数字"という名前の変数があり、その値をリストに入れている場合に職場をチェックします。 '' fam [[1]] < - some_value'、 '' fam [[2]] < - some_other_value'など...リストや配列についてのチュートリアルを探してみましょう。 R –

関連する問題