首页 > 解决方案 > S4 对象是否有类似 lapply 的功能?

问题描述

将函数应用于 S4 中的所有插槽。

当然,也可以通过 for-loop over 来完成slotNames()。但我很好奇它是否可以以矢量化方式完成。

标签: rlapplys4

解决方案


一般来说,不可能以矢量化的方式对插槽进行操作,因为插槽可能有任何类。如果一个类有结构

slotA = "factor"
slotB = "integer"
slotC = "numeric"

那么即使您可能对所有这些(例如summary)应用相同的(通用)函数,实际调用的方法也会有所不同。该任务是不可矢量化的,正如“拖地、洗车和吸尘地毯”的命令集可以矢量化一样,即使它们可能都共享通用功能clean——你需要一个拖把来完成一项任务,一个另一个是海绵,第三个是吸尘器。(相比之下,“将卧室、走廊和休息室的三块地毯吸尘”的指令集可以在一定程度上进行矢量化——您不必将真空吸尘器从盒子中取出三次,然后将其收起三次次,你可以只做一次)

如果你可以保证所有的槽都属于同一个类,那么向量化就变得更容易了,但是如果是这样的话,为什么这个对象有它的结构呢?如果它需要是 S4,那么只需定义一个包含列表、矩阵或数组的简单类,然后根据需要使用sapplyapply


推荐阅读