首次发帖如果不符合标准就道歉!我正在进行模拟,我正在使用cut()
创建从多元正态分布中绘制的有序变量。我正在尝试使用包含我所有条件的expand.grid()
创建一个data.frame,然后运行mdply()
来“将它们组合在一起”。该df中的特定列为df$k
,其中包含将被送入cut()
的切割点向量:
n <- c(25,50)
p <- c(0,.1)
k <- list(c(-Inf,0,Inf), c(-Inf,-1,1,Inf))
factors <- list(n=n, p=p, k=k)
df <- expand.grid(factors)
fx <- function(n, p, k){
data <- mvrnorm(n,c(0,0),matrix(c(1,p,p,1),2,2))
x <- cut(data[,1],k)
y <- cut(data[,2],k)
dat <- cbind(x,y)
}
我的问题是虽然我的条件表看起来是正确的,df$k
实际上是一个包含8个列表的列表,当输入mdply()
时会出现错误:Error: (list) object cannot be coerced to type 'integer'
(我是假设这就是错误弹出的原因。)所以基本上我想取消每个单元格,以便每个单元格只是一个向量c(-Inf, 0, Inf)
。它看起来与df现在完全一样,但我相信它会解决问题。 unlist(df$k)
创建了一个长向量,并且丢失了我需要的剪切 - unlist(df$k[[x]])
完成了这个技巧,但我需要对列的每个元素执行此操作。
以下是产生错误的代码:
test <- mdply(df, .fun = runSim) #runSim contains fx above and an estimation function