我需要将mixtools库中的函数normalmixEM()应用于分组数据。但是normalmixEM()返回了一个summarise_all不喜欢的对象。
理想情况下,我想返回一个列表,然后可以在下一步中进行分解。失败的话,将我需要的每个返回值都分成自己的列。
stattest是一个具有三列的数据框,看起来像这样:
Sample, year, x
1 , 2017, 43
1 , 2017, 23
1 , 2017, 19
1 , 2018, 26
1 , 2018, 16
2 , 2017, 63
2 , 2017, 25
2 , 2018, 22
这就是我要尝试的:
BiModality <- stattest %>%
group_by(Sample,year) %>%
summarise_all(funs(
try(normalmixEM(x, eps=1e-03, arbmean=TRUE,mu=c(mean(x)*0.7,mean(x)*1.3)), silent=TRUE) )
)
导致错误的原因
x
列的长度必须为1(汇总值),而不是9
所以我尝试返回一个值:
BiModality <- stattest %>%
group_by(Sample,year) %>%
summarise_all(funs(
try(normalmixEM(x, eps=1e-03, arbmean=TRUE,mu=c(mean(x)*0.7,mean(x)*1.3))$lambda[1], silent=TRUE) )
)
这使我接近,但最终未能说出:
错误:列x
无法将第13组提升为数字
理想的情况是我最终得到一个新的数据框:
Sample, Year, MxMdl
1 , 2017, [object that I can access subvariables of]
1, 2018, [object]
...
但如果需要以以下形式输出:
Sample, Year, Lambda1, Lamba2, Mu1, Mu2, Sigma1, Sigma2
1, 2017, 0.6, 0.4, 3.2, 4.1, 0.76, 0.63
...
也很好。