取消列出单个列表的data.frame列并将每个单元格保留为向量

时间:2015-05-14 03:57:32

标签: r list

首次发帖如果不符合标准就道歉!我正在进行模拟,我正在使用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

0 个答案:

没有答案