我知道在此网站here,here和here中提出了类似的问题,但这些问题都没有解决我的问题。
我有一个数据框,我想将rdirichlet
函数(从gtools
)应用到每一行。因此,每一行都应视为aplha。
data = NULL
data <- data.frame(rbind(
oct = c(60, 32, 8),
sep = c(53, 35, 12),
ago = c(54, 40, 6)
))
data <- data/100*1000
library(gtools) # contains the function
sim <- 10000 # simulation
我的第一个注意事项是使用apply
,它确实有用,但输出结果并不清楚进行进一步的分析;每行计算成为一个向量:
p = apply(data, 1, function(x) rdirichlet(sim, alpha = x + 1))
我也尝试循环但没有成功:
p = NULL
for(i in 1:length(data)) {
p[i] <- rdirichlet(sim, alpha = data[i] + 1)
}
任何提示如何解决这个问题?
答案 0 :(得分:2)
首先,您可能希望将data
中的匿名函数中的apply
更改为x
以匹配x
中的function(x)
apply(data, 1, function(x) rdirichlet(sim, alpha = x + 1))
这对我有用,因为它提供了一个包含三列和30000行的输出。
答案 1 :(得分:1)
这里有两个重要的事情。首先,矢量化是最好的方法:
ans <- apply(data, 1, function(x) rdirichlet(sim, alpha = x + 1))
通过这样做,你将每行计算作为向量接收,基本上是k vs sim like。
然后你需要对以下内容进行子样本处理:
margin <- ans[1:100000,1] - ans[100001:200000,1]