我使用插入符号包的'findCorrelation'函数来定义相关等于或低于截止(阈值)集的因子。我的脚本如下:
library (caret)
set.seed(123)
#make a matrix to calculate correlation
data<-as.matrix(data.frame(x=rnorm(1:1000),y=rnorm(1:1000),z=rnorm(1:1000),w=rnorm(1:1000)))
#calculate correlation
df2 <- cor(data)
hc <- findCorrelation(as.matrix(df2), cutoff=0.05) # putt any value as a "cutoff"
hc <- sort(hc)
print(df2)
print(df2[-hc,-hc])
df2输出(所有因素): 打印(DF2)
x y z w
x 1.00000000 0.086479441 -0.01932954 -0.002994710
是0.08647944 1.000000000 0.02650333 -0.007029076
z -0.01932954 0.026503334 1.00000000 0.050560850
w -0.00299471 -0.007029076 0.05056085 1.000000000
df2,应用截止值为0.05:
print(df2[-hc,-hc])
x w
x 1.00000000 -0.00299471
w -0.00299471 1.00000000
但是,如果我应用cutoff = 0.1,我将使用零矩阵而不是截止值以下的所有因子列表:
hc <- findCorrelation(as.matrix(df2), cutoff=0.1)
hc <- sort(hc)
print(df2[-hc,-hc])
df2输出截止= 0.1:
&lt; 0 x 0矩阵&gt;
我已经从我的业务案例中运行了其他示例,并且它似乎至少有一个高于截止值的因子来生成低于截止值的因子矩阵。
否则,生成零矩阵。
我已经潜入了'findCorrelation'的剧本,但效果很好。也许不会假定脚本处理这种情况。
所以我很感激您的提示如何解决这个问题。
07/03/16更新:
由于@topepo的有用答案,我修改了脚本:
要替换的部分:
print(df2[-hc,-hc])
with:
if(length(hc)==0){
print(df2)
}else{
print(df2[-hc,-hc])
}
答案 0 :(得分:0)
这不是一个错误。
在?findCorrelation
中,它描述了返回的值
索引向量,表示要删除的列(当
names = TRUE
时)否则是列名称的向量。如果没有相关性符合条件,则返回integer(0)
。
您看到结果的问题是因为您需要通过类似
之类的内容确保子集向量具有元素
if(length(hc) > 0) df2 <- df2[-hc, -hc]
任何零长度整数都会产生此问题。