R t.test() 以 data.frames 作为参数
R t.test() with data.frames as arguments
CrossValidated 上有一个问题,有人给 t.test
函数提供了两个数据帧而不是两个向量:https://stats.stackexchange.com/questions/261830/t-test-or-wilcox-in-r-and-how-to-apply-to-dataframe-splitted-in-2-groups/
请参阅此代码以获取更短的示例
a <- data.frame(foo=1:5, bar=5:9)
b <- data.frame(foo=1:5, bar=5:9)
t.test(a,b)
t.test
函数的 help
页面明确指出 x 和 y 应该是
a (non-empty) numeric vector of data values.
上面的代码仍然没有抛出错误,但给出了结果。结果是什么意思?
这是未记录的行为,但您在传递 data.frames 时违反了记录。
发生这种情况:
x <- a
y <- b
yok <- !is.na(y)
xok <- !is.na(x)
y <- y[yok]
#[1] 1 2 3 4 5 5 6 7 8 9
x <- x[yok]
#[1] 1 2 3 4 5 5 6 7 8 9
基本上,您得到的结果与 t.test(unlist(a), unlist(b))
相同。
你可以看看里面的代码:
stats:::t.test.default
我在这里展示了一些精选的代码
function (x, y = NULL, alternative = c("two.sided", "less", "greater"),
mu = 0, paired = FALSE, var.equal = FALSE, conf.level = 0.95,
...)
{
alternative <- match.arg(alternative)
if (!missing(mu) && (length(mu) != 1 || is.na(mu)))
### snip
if (!is.null(y)) {
### snip
yok <- !is.na(y)
xok <- !is.na(x)
### snip
y <- y[yok]
所以我们确实有一个 y 参数,您会看到 yok
将导致一个选择,当在 y[yok]
中使用时,该选择将变成一个矢量。最后,一切都会发生在 data.frame 上,强制转换为向量 (as.vector
)。
绝对不是人们打算做的,而是 miss-specifications 来自用户的...
CrossValidated 上有一个问题,有人给 t.test
函数提供了两个数据帧而不是两个向量:https://stats.stackexchange.com/questions/261830/t-test-or-wilcox-in-r-and-how-to-apply-to-dataframe-splitted-in-2-groups/
请参阅此代码以获取更短的示例
a <- data.frame(foo=1:5, bar=5:9)
b <- data.frame(foo=1:5, bar=5:9)
t.test(a,b)
t.test
函数的 help
页面明确指出 x 和 y 应该是
a (non-empty) numeric vector of data values.
上面的代码仍然没有抛出错误,但给出了结果。结果是什么意思?
这是未记录的行为,但您在传递 data.frames 时违反了记录。
发生这种情况:
x <- a
y <- b
yok <- !is.na(y)
xok <- !is.na(x)
y <- y[yok]
#[1] 1 2 3 4 5 5 6 7 8 9
x <- x[yok]
#[1] 1 2 3 4 5 5 6 7 8 9
基本上,您得到的结果与 t.test(unlist(a), unlist(b))
相同。
你可以看看里面的代码:
stats:::t.test.default
我在这里展示了一些精选的代码
function (x, y = NULL, alternative = c("two.sided", "less", "greater"),
mu = 0, paired = FALSE, var.equal = FALSE, conf.level = 0.95,
...)
{
alternative <- match.arg(alternative)
if (!missing(mu) && (length(mu) != 1 || is.na(mu)))
### snip
if (!is.null(y)) {
### snip
yok <- !is.na(y)
xok <- !is.na(x)
### snip
y <- y[yok]
所以我们确实有一个 y 参数,您会看到 yok
将导致一个选择,当在 y[yok]
中使用时,该选择将变成一个矢量。最后,一切都会发生在 data.frame 上,强制转换为向量 (as.vector
)。
绝对不是人们打算做的,而是 miss-specifications 来自用户的...