'x'必须是数字向量:来自data.frame数字的错误

oax*_*att 2 r dataframe

我在文件/表中的两列上运行cor.test.

tmp <- read.table(files_to_test[i], header=TRUE, sep="\t")
## Obtain Columns To Compare ##
colA <-tmp[compareA]
colB <-tmp[compareB]
# sctr = 'spearman cor.test result'
sctr <- cor.test(colA, colB, alternative="two.sided", method="spearman")
Run Code Online (Sandbox Code Playgroud)

但我得到了这个令人困惑的错误......

Error in cor.test.default(colA, colB, alternative = "two.sided", method = "spearman") : 
'x' must be a numeric vector
Run Code Online (Sandbox Code Playgroud)

列中的值是数字但是

is.numeric(colA) = FALSE 
class (colA) = data.frame
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Joh*_*ohn 10

在选择器前放一个逗号.当您使用单个索引变量而不使用逗号选择data.frame对象时,它会将列提取为列表元素保留类型.因此,它仍然是一个data.frame.但是,data.frame对象允许您使用矩阵样式表示法进行选择,然后您将获得一个简单的向量.所以只需改变

colA <-tmp[compareA]
colB <-tmp[compareB]
Run Code Online (Sandbox Code Playgroud)

colA <-tmp[,compareA]
colB <-tmp[,compareB]
Run Code Online (Sandbox Code Playgroud)

我认为这更符合data.frame类型的精神,而不是double brace([[)选择器,它将执行类似但基于列表类型的精神.它们也与单个项目和行选择器无关.因此,在使用data.frame执行多种操作的代码中,双括号选择器显得有些奇怪.