2015-05-28 2 views
2

Вот пример:S4 методы метапрограммирование в R

setGeneric("loadBim", 
     function(pl_info, ...) { 
      standardGeneric("loadBim") 
     }) 

setMethod("loadBim", 
     signature(pl_info = "PlInfo"), 
     function(pl_info) { 
      loadFFDF([email protected]_dir_trio["bim"]) 
     }) 
setGeneric("loadFam", 
     function(pl_info, ...) { 
      standardGeneric("loadFam") 
     }) 

setMethod("loadFam", 
     signature(pl_info = "PlInfo"), 
     function(pl_info) { 
      loadFFDF([email protected]_dir_trio["fam"]) 
     }) 

setGeneric("loadFrq", 
     function(pl_info, ...) { 
      standardGeneric("loadFrq") 
     }) 

setMethod("loadFrq", 
     signature(pl_info = "PlInfo"), 
     function(pl_info) { 
      loadFFDF([email protected]_dir_trio["frq"]) 
     }) 

Все эти методы S4 похожи, они отличаются только для некоторых имен расширений файлов: бьет, ф и FRQ. Мне интересно, существует ли какая-то метапрограммирующая техника для их упрощения (генерирование программно)?

ответ

0

Я узнал одно решение:

loadPlinkMeta = gtools::defmacro(ext, method_name, expr = { 
    setGeneric(method_name, 
      function(pl_info, ...) { 
       standardGeneric(method_name) 
      }) 
    setMethod(method_name, 
      signature(pl_info = "PlInfo"), 
      function(pl_info) { 
       loadFFDF([email protected]_dir_trio[ext]) 
      }) 
}) 

loadPlinkMeta("bim", "loadBim") 
loadPlinkMeta("fam", "loadFam") 
loadPlinkMeta("frq", "loadFrq") 
Смежные вопросы