在FindCorrelation中需要R和TRUE/FALSE。

3

我在R中创建了一个简单的相关矩阵,并尝试使用caret进行特征选择,以便我可以删除高度相关的X属性。

这是我的代码:

highlyCorrelated <- findCorrelation(correlationMatrix, cutoff = 0.90, verbose = FALSE, names = TRUE, exact = ncol(correlationMatrix) < 100)
  • highlyCorrelated是新对象的名称
  • correlationMatrix是我的相关矩阵的名称

无论我如何将函数输入到R中,我都会收到以下错误。即使我只使用一个参数,我仍然会收到此错误:

Error in if (x[i, j] > cutoff) { : missing value where TRUE/FALSE needed

有什么想法吗?

在错误发生后打印出 i 和 j 的值,并检查 x[i,j] 的值。 - tushaR
当尝试打印时,i和j都不是对象,因此无法找到。 - DataGuy
1
你的相关矩阵是否有缺失值? - user20650
没有缺失值。 - DataGuy
3
@user20650 是正确的,我的矩阵中有NA值。谢谢! - DataGuy
2个回答

2
我曾经遇到过同样的问题,@user20650的答案是正确的。我总是做同样的“预处理”来确保finCorrelation能够正常工作:
nums <- sapply(data, is.numeric)
data.numeric <- data[ , nums]

data.without_na <- na.omit(data.numeric)
cor_matrix <- cor(data.without_na)

findCorrelation(cor_matrix, 0.7)

0

我曾经遇到过同样的问题。在我的情况下,问题出在数据中存在无限值,而use='complete.obs'在cor()函数中没有考虑到这一点。

通过对数据进行预处理,我解决了这个问题。

data <- apply(data, 2, function(y) {y[!is.finite(y)]=NA; y})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接