Проблема, указанная в вопросе, связана с различиями в поведении в формах [
и [[
оператора извлечения.
Форма [
оператора извлечения при использовании в кадре данных возвращает другой кадр данных, который также является списком.
str(mtcars[1])
'data.frame': 32 obs. of 1 variable:
$ mpg: num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
Форма [[
оператора извлечения возвращает вектор.
str(mtcars[[1]])
num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
Поскольку base::cor.test()
принимает векторы в качестве входных данных, необходимо использовать форму [[
оператора извлечения, data frame[,col]
версию оператора [
или форму $
. Например:
cor.test(mtcars[,1],mtcars[,4])
cor.test(mtcars[[1]],mtcars[[4]])
cor.test(mtcars$mpg,mtcars$hp)
... все они возвращают одинаковый результат:
> cor.test(mtcars$mpg,mtcars$hp)
Pearson's product-moment correlation
data: mtcars$mpg and mtcars$hp
t = -6.7424, df = 30, p-value = 1.788e-07
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.8852686 -0.5860994
sample estimates:
cor
-0.7761684
ПРИМЕЧАНИЕ: некоторые функции R могут вместо этого обрабатывать ввод кадров данных векторов, например psych::corr.test()
.
> psych::corr.test(mtcars[1],mtcars[4])
Call:psych::corr.test(x = mtcars[1], y = mtcars[4])
Correlation matrix
hp
mpg -0.78
Sample Size
[1] 32
Probability values adjusted for multiple tests.
hp
mpg 0
To see confidence intervals of the correlations, print with the short=FALSE option