2016-11-24 28 views
1

現在、一連のデータに対して一連のテストを実行するユーティリティを作成しています。私はdata.frameにデータを持っていて、データの各行でN個のテストを実行したいと思います。 (私の用語がすべてではない場合は謝罪します:私は5時間のうちにRを使用しています)。Rのリストに反復するR

私のユーティリティでは、テストを別のファイルに分割し、メインプログラムですべてのテストをロードし、各data.frame行に対して一度実行したいと思います。ここで私は、関連するファイルをソースすることやってるものです:

file.sources = list.files(pattern="validator-.*.R$") 
sapply(file.sources,source,verbose = TRUE) 

これはうまく機能し、私が一致する各ファイルでこれを行う場合:

b <- function(a) { 
    if(grep("^[[:blank:]]*$", a)) { 
    return(FALSE) 
    } else { 
    return(TRUE) 
} 

test.functions <- append(test.functions, b) 

それから私は正確にtest.functionリストで終わります実行するすべてのテスト関数が含まれていますが、これは私が立ち往生するところです。私はsapply()のバリエーションを試しましたが、do.call()もこれに関連していると思います。これは私の現在の試みです:ここ

process.entry <- function(a) { 
    lapply(test.functions,do.call,a) 
} 
sapply(all.data,process.entry) 

私の試みは、その引数としてtest.functionsを反復したデータの1行を取り、引数としてデータの関数と行とのdo.call()を呼び出す関数を作成することでした。これは非常に動作するようには思えない、と投げ誤差がある:私はこのエラーが発生した場所を完全にはわからない、しかし

Error in FUN(X[[i]], ...) : second argument must be a list 

、そして恐らく:やっての他、クリーナー、方法がありますどのようなI意図する!

+0

第2引数の 'class'とは何ですか? –

答えて

1
# I would 
process.entry <- function(a) { 
    # call each function to a 
    # I think a anonymous function is easier here; 
    lapply(test.functions, function(f) f(a)) 
} 

# sapply iterate over column of data.frame by default, 
# if you want to iterate over rows, use for or apply; 
apply(all.data, 1, process.entry) 
関連する問題