Попробуйте tmp[[compareA]]
и tmp[[compareB]]
вместо одинарных скобок.Вы хотели извлечь числовые векторы, вместо этого вы извлекли фреймы данных из одного столбца.Сравните следующее:
> z <- data.frame(a=1:5,b=1:5)
> str(z["a"])
'data.frame': 5 obs. of 1 variable:
$ a: int 1 2 3 4 5
> is.numeric(z["a"])
[1] FALSE
> str(z[["a"]])
int [1:5] 1 2 3 4 5
> is.numeric(z[["a"]])
[1] TRUE
Попробуйте это с cor.test
:
Одинарные скобки: ошибка, как указано выше.
> cor.test(z["a"],z["b"])
Error in cor.test.default(z["a"], z["b"]) : 'x' must be a numeric vector
Двойные скобки: работает.
> cor.test(z[["a"]],z[["b"]])
Pearson's product-moment correlation
data: z[["a"]] and z[["b"]]
[snip snip snip]
Как @Aaron указывает ниже, cor
будет хорошо обрабатывать кадры данных с одним столбцом, преобразовывая их в матрицы - но cor.test
этого не делает.(Это может быть поднято на r-devel@r-project.org
или передано в систему отслеживания ошибок R как элемент списка желаний ...)
См. Также: Числовой столбец в data.frame, возвращающий "num"с str (), но не is.numeric () , Какая самая большая R-гоча, с которой вы столкнулись? (может быть, другие)