使用setMethod为对象类型列表创建方法

时间:2013-11-11 08:42:29

标签: r

我创建了一个方法myMethod,它接受​​对象myObject作为参数。我希望能够将此方法传递给myObject列表。我可以使用for循环单独传递每个对象,但我更喜欢使用R内置的处理函数的功能。

我创建了一个类似的方法:

setMethod("myMethod",
      signature = c("myObject"),
      definition = function(obj, ...){
          "some code"
      })

我有一个默认方法:

myMethod <- function(obj, ...){
    print("Generic base function; does nothing.")
    obj    
}

当我向它发送该类型的对象时,这非常正常。假设我有一个保存在listOfObjects中的myObject列表。

如果我这样做:

> myMethod(listOfObjects[[1]])

执行“我的代码”时,一切都按预期工作。但是,如果我发送一个相同对象的列表,它会命中我的默认方法:

> myMethod(listOfObjects[1:10])

我明白了:

[1] "Generic base function; does nothing."

我能做些什么让myMethod轻松运行我列表中的每个对象?我的列表可能非常大,所以我想使用R的内置向量函数,而不是使用'慢'for循环。

1 个答案:

答案 0 :(得分:2)

首先,你的短语 R内置处理函数的能力是非常模糊的。 据我了解,它是lapply。 简单地说:

lapply(objs, myMethod)

如果你想要一个获取对象列表的函数,你可以定义一个:

setMethod("myMethod",
      signature = c("list"),
      definition = function(objs){
          lapply(objs, myMethod)
})