【问题标题】:S4 methods metaprogramming in RR中的S4方法元编程
【发布时间】:2015-08-11 09:01:57
【问题描述】:

这是一个例子:

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

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

setMethod("loadFam",
        signature(pl_info = "PlInfo"),
        function(pl_info) {
            loadFFDF(pl_info@ff_dir_trio["fam"])
        })

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

setMethod("loadFrq",
        signature(pl_info = "PlInfo"),
        function(pl_info) {
            loadFFDF(pl_info@ff_dir_trio["frq"])
        })

所有这些 S4 方法都是相似的,它们仅在某些文件扩展名上有所不同:bim、fam 和 frq。我想知道是否有一些元编程技术可用于简化它们(以编程方式生成它们)?

【问题讨论】:

    标签: r metaprogramming s4


    【解决方案1】:

    我找到了一种解决方案:

    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(pl_info@ff_dir_trio[ext])
                })
    })
    
    loadPlinkMeta("bim", "loadBim")
    loadPlinkMeta("fam", "loadFam")
    loadPlinkMeta("frq", "loadFrq")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-03
      • 2011-04-05
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多