S4 对象是否有类似 lapply 的函数?
Is there lapply-like function for S4 object?
将函数应用于 S4 中的所有插槽。
当然可以用for-loop over slotNames()
来完成。但是我很好奇是否可以用矢量化的方式来完成。
一般来说,不可能以向量化的方式对槽进行操作,因为槽可能有任何 class。如果 class 具有结构
slotA = "factor"
slotB = "integer"
slotC = "numeric"
那么即使您可能对所有这些应用相同的(通用)函数(例如,summary
),实际调用的方法也会有所不同。任务只是不可矢量化,就像一组命令 "mop the floor, wash the car and vacuum the carpet" 可以矢量化一样,即使它们可能都共享通用函数 clean
— 你需要一个任务执行拖把,另一个任务需要一块海绵第三个是真空吸尘器。 (与命令集 "vacuum the three carpets in the bedroom, hallway and lounge" 相比, 可以 在一定程度上进行矢量化 — 您不必将真空吸尘器从盒子中取出三次并将其放入离开三次,一次就可以)
如果你能保证所有的槽都是相同的class,那么向量化就变得更容易了,但如果是这样的话,为什么这个对象有这样的结构呢?如果它需要是 S4 那么只需定义一个包含列表、矩阵或数组的简单 class,然后根据需要使用 sapply
或 apply
。
将函数应用于 S4 中的所有插槽。
当然可以用for-loop over slotNames()
来完成。但是我很好奇是否可以用矢量化的方式来完成。
一般来说,不可能以向量化的方式对槽进行操作,因为槽可能有任何 class。如果 class 具有结构
slotA = "factor"
slotB = "integer"
slotC = "numeric"
那么即使您可能对所有这些应用相同的(通用)函数(例如,summary
),实际调用的方法也会有所不同。任务只是不可矢量化,就像一组命令 "mop the floor, wash the car and vacuum the carpet" 可以矢量化一样,即使它们可能都共享通用函数 clean
— 你需要一个任务执行拖把,另一个任务需要一块海绵第三个是真空吸尘器。 (与命令集 "vacuum the three carpets in the bedroom, hallway and lounge" 相比, 可以 在一定程度上进行矢量化 — 您不必将真空吸尘器从盒子中取出三次并将其放入离开三次,一次就可以)
如果你能保证所有的槽都是相同的class,那么向量化就变得更容易了,但如果是这样的话,为什么这个对象有这样的结构呢?如果它需要是 S4 那么只需定义一个包含列表、矩阵或数组的简单 class,然后根据需要使用 sapply
或 apply
。