哪个是适用于两个数字矩阵的权利?

dai*_*ish 2 r apply

假设我有1000个x观测值的向量,以及1000个观测值的向量y.每行x和每行y分别对应100个样本.

x <- t(replicate(1000, rnorm(100,mean=6)))
y <- t(replicate(1000, rnorm(100,mean=5)))
Run Code Online (Sandbox Code Playgroud)

我想进行一次测试,看看每行的平均值是否与每一行的平均值有x显着差异y.

哪个是apply在这种情况下使用的权利?理想情况下,它会是这样的:

Xapply(x,y, function(x,y) t.test(x,y)$conf.int)
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?

G. *_*eck 5

1)mapply尝试这个.dt_将每个的xy成原始行的数据帧,这也是原始行允许的列表mapply将被直接使用.t根据所需的输出方向,您可能希望也可能不希望显示外部:

dt_ <- function(x) data.frame(t(x))
conf.int.1 <- t(mapply(function(x, y) t.test(x, y)$conf.int, dt_(x), dt_(y)))
Run Code Online (Sandbox Code Playgroud)

1a)使用函数的公式表示法略微缩短变化.见信息上fn的上gsubfn主页和在包文档更多

library(gsubfn) # fn
conf.int.1a <- t(fn$mapply(~ t.test(x, y)$conf.int, dt_(x), dt_(y)))
Run Code Online (Sandbox Code Playgroud)

2)应用的另一种方法是从创建3D阵列xy并然后在第一dimenstion申请t检验:

z <- array(c(x, y), c(dim(x), 2))
conf.int.2 <- t(apply(z, 1, function(x) t.test(x[, 1], x[, 2])$conf.int))
Run Code Online (Sandbox Code Playgroud)

2a)可以abindabind包中使用一种更好的创建3d数组的方法:

library(abind)
a <- abind(x, y, along = 3)
conf.int.2a <- t(apply(a, 1, function(x) t.test(x[, 1], x[, 2])$conf.int))
Run Code Online (Sandbox Code Playgroud)

更新:添加解决方案2.

更新:添加解决方案2a.