从R中的S4类输出中检索值

时间:2015-05-29 15:40:28

标签: r s4

我在R中编写模拟。我决定使用S4类在函数中返回两个值。当我运行模拟时,我想知道如何从输出中检索值以计算它们的分布时刻,例如均值?

setClass(Class="Coalescent", 
         representation(
           TMRCA="numeric",
           t_total="numeric"
           )
         )

输出如下所示:

> TMRCA_sim <-replicate(10000, Coalescent_fun(n, Ne))
> head(TMRCA_sim)
[[1]]
An object of class "Coalescent"
Slot "TMRCA":
[1] 6.723592

Slot "t_total":
[1] 9.693661


[[2]]
An object of class "Coalescent"
Slot "TMRCA":
[1] 1.592346

Slot "t_total":
[1] 11.50406

我想要做的是提取&#34; TMRCA&#34;的所有值。和&#34; t_total&#34;并计算平均值。当然,我可以使用许多其他方法来进行模拟,但我想同时学习类的使用。

1 个答案:

答案 0 :(得分:1)

您可以将数据提取到矩阵中:

mx <- sapply(TMRCA_sim, function(x) sapply(slotNames(x), slot, object=x))

对于一些补充数据,这是mx的样子:

             [,1]      [,2]      [,3]      [,4]      [,5] 
TMRCA   0.3823880 0.3403490 0.5995658 0.1862176 0.6684667 
t_total 0.8696908 0.4820801 0.4935413 0.8273733 0.7942399 

然后您可以使用rowMeansapply

rowMeans(mx)
apply(mx, 1, mean)  # equivalent, though slower and more flexible
apply(mx, 1, var)

虽然我在评论中注意到,这是在R中做事的一种非常缓慢的方式。您希望Coalescent_fun生成具有两个向量的对象,每个向量具有多个条目,而不是每个模拟一个对象。