1) mapply 试试这个。 dt_ 将x 和y 中的每一个转换为原始行的数据框,该数据框也是原始行的列表,允许直接使用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)))
1a) 使用公式符号的函数稍短变化。有关更多信息,请参阅 gsubfn home page 和 package documentation 上的 fn 信息
library(gsubfn) # fn
conf.int.1a <- t(fn$mapply(~ t.test(x, y)$conf.int, dt_(x), dt_(y)))
2) 应用 另一种方法是从x 和y 创建一个3d 数组,然后在第一个维度上应用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))
2a) 使用abind 包中的abind 可以实现一种更好的创建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))
更新:添加了解决方案 2。
更新:添加了解决方案 2a。