Rパッケージを使用penalizedSVM
して、特徴選択を行おうとしています。trainingdataと呼ばれるいくつかのdata.framesのリストがあります。
trainingdata <-lapply(trainingdata, function(data)
{
levels(data$label) <- c(-1, 1)
train_x<-data[, -1]
train_x<-data.matrix(train_x)
trainy<-data[, 1]
print(which(!is.finite(train_x)))
scad.fix<-svm.fs(train_x, y=trainy, fs.method="scad",
cross.outer=0, grid.search="discrete",
lambda1.set=lambda1.scad, parms.coding="none",
show="none", maxIter=1000, inner.val.method="cv",
cross.inner=5, seed=seed, verbose=FALSE)
data <- data[c(1, scad.fix$model$xind)]
data
})
いくつかの反復はうまくいきますが、1つのdata.frameで次のエラーメッセージが表示されます。
[1] "feature selection method is scad"
Error in svd(m, nv = 0, nu = 0) : infinite or missing values in 'x'
Calls: lapply ... scadsvc -> .calc.mult.inv_Q_mat2 -> rank.condition -> svd
次の呼び出しを使用して、xが本当に無限大であるかどうかも確認していますが、エラーが発生した先行および現在のすべてのdata.frameに対して呼び出しは0を返します。
print(which(!is.finite(train_x)))
無限の値をチェックする他の方法はありますか?このエラーを修正するために他に何ができるでしょうか?lapply内で処理されている現在のdata.frameのインデックスを判別する方法はありますか?