插入符号中的 closeZeroVar 函数

3 r r-caret

当我运行以下代码时,数据集中的所有变量都将被删除,

data <- data[, -nearZeroVar(data)]
Run Code Online (Sandbox Code Playgroud)

我对 R 相当陌生,我的期望是上面的代码将删除数据集中的近零方差预测变量,实际上数据中没有近零方差预测变量,所以我认为它会保留数据按原样设置,但事实并非如此。

运行脚本时,我并不总是知道预测变量是否接近零方差预测变量......我如何修改代码以将其添加到脚本中,以检查是否存在接近零方差预测变量以及是否没有预测变量是接近零方差的预测变量,那么它应该按原样保留数据集。

下面的代码重现了这种情况。

library(caret)
data(GermanCredit)
# remove the near-zero var predictors
GermanCredit <- GermanCredit[, -nearZeroVar(GermanCredit)] 
# but now if i redo the above command it removes all the predictors from the data set.
GermanCredit <- GermanCredit[, -nearZeroVar(GermanCredit)]
# all predictors removed
Run Code Online (Sandbox Code Playgroud)

在某些情况下,我们可能不知道数据集不包含任何接近零方差的预测变量。

更新

@LauriK,topepo(Max):还有一个愚蠢的问题,

GermanCredit <- GermanCredit[, -nearZeroVar(GermanCredit)]`
Run Code Online (Sandbox Code Playgroud)

我想如果我把上面的代码写成

GermanCredit <- GermanCredit[, -integer(0)]
Run Code Online (Sandbox Code Playgroud)

integer(0)因为在它应该删除之前有一个(-)符号,integer(0)它什么也没有,所以它应该删除任何内容并按原样保留数据集。

我知道我可能在这里缺少一个非常基本的概念,但我想学习。

top*_*epo 5

首先保存对象:

nzv_cols <- nearZeroVar(GermanCredit)
if(length(nzv_cols) > 0) GermanCredit <- GermanCredit[, -nzv_cols]
Run Code Online (Sandbox Code Playgroud)

最大限度