我在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;并计算平均值。当然,我可以使用许多其他方法来进行模拟,但我想同时学习类的使用。
答案 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
然后您可以使用rowMeans
或apply
:
rowMeans(mx)
apply(mx, 1, mean) # equivalent, though slower and more flexible
apply(mx, 1, var)
虽然我在评论中注意到,这是在R中做事的一种非常缓慢的方式。您希望Coalescent_fun
生成具有两个向量的对象,每个向量具有多个条目,而不是每个模拟一个对象。