【发布时间】:2014-11-03 03:02:18
【问题描述】:
假设我的数据包含 3 个类别。我想找到每个类别的协方差矩阵,并期望返回是一个数组。
set.seed(7)
x <- rbind(cbind(rnorm(120,-1,0.1), rnorm(120,-0.5,0.1)),
cbind(rnorm(120,-0.4,0.1), rnorm(120,0,0.1)),
cbind(rnorm(120,.2,0.1), rnorm(120,0,0.1)))
lab <- c(rep(1, 120), rep(2, 120), rep(3, 120))
newx <- cbind(x, lab = lab)
s <- sapply(1:3, function(k){ var(newx[lab == k, -3]) })
dim(s) <- c(2,2,3)
返回,
, , 1
[,1] [,2]
[1,] 0.008880447 -0.001116058
[2,] -0.001116058 0.009229061
, , 2
[,1] [,2]
[1,] 0.012193536 -0.001217923
[2,] -0.001217923 0.009391710
, , 3
[,1] [,2]
[1,] 0.010752319 0.001231336
[2,] 0.001231336 0.008226595
我知道如何使用sapply,但如果我想使用data.table,我该怎么做?
我试过了:
library(data.table)
dt <- data.table(newx)
dt[,lapply(.SD, var), by = lab]
但它没有提供我预期的回报。
【问题讨论】:
-
你想要什么输出?数据表是数据框,而不是 3 维数组
-
@rawr 我想要的输出是上面包含每个类别的协方差的数组。在这种情况下,我有 3 个类别,所以我希望有 3 个协方差矩阵。
标签: r data.table covariance lapply sapply