Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于SCAD的SVM特征选择_R_Svm - Fatal编程技术网

R 基于SCAD的SVM特征选择

R 基于SCAD的SVM特征选择,r,svm,R,Svm,使用DSVMR包,我正在尝试进行功能选择。有一个名为trainingdata的多个数据帧的列表 trainingdata <-lapply(trainingdata, function(data) { levels(data$label) <- c(-1, 1) train_x<-data[, -1] train_x

使用DSVMR包,我正在尝试进行功能选择。有一个名为trainingdata的多个数据帧的列表

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
                   })
使用下面的调用,我还检查x是否真的是无限的,但是对于发生错误的所有前面的和当前的data.frame,调用返回0

print(which(!is.finite(train_x)))

有没有其他方法可以检查无限值?还可以做些什么来纠正这个错误?是否有任何方法可以确定Lappy中正在处理的当前data.frame的索引?

对于第一个问题,
无限或缺少“x”中的值
建议您将条件更改为类似

   idx <- is.na(train_x) | is.infinite(train_x)
例如:

 ll <- list(f=1,c=2)
> lapply(names(list(f=1,c=2)), function(x) data <- ll[x])
[[1]]
[[1]]$f
[1] 1


[[2]]
[[2]]$c
[1] 2
例如,这里我在这个列表上测试它,代码继续执行到列表的末尾,即使列表中有NA

lapply(list(1,NA,2), function(x){
  tryCatch(
  if (any(!is.finite(x)))
     stop("infinite or missing values in 'x'")
  , error = function(e) e)
       })

对于第一个问题,
x'中的无限或缺失值
建议您将条件更改为类似的值

   idx <- is.na(train_x) | is.infinite(train_x)
例如:

 ll <- list(f=1,c=2)
> lapply(names(list(f=1,c=2)), function(x) data <- ll[x])
[[1]]
[[1]]$f
[1] 1


[[2]]
[[2]]$c
[1] 2
例如,这里我在这个列表上测试它,代码继续执行到列表的末尾,即使列表中有NA

lapply(list(1,NA,2), function(x){
  tryCatch(
  if (any(!is.finite(x)))
     stop("infinite or missing values in 'x'")
  , error = function(e) e)
       })

谢谢更新代码后,我仍然收到相同的错误消息。虽然我手动检查了数据,但没有任何INF值。@Shahzad可能是因为
svm.fs
函数中的一些计算步骤造成了无穷大的值……这篇文章建议,如果(any(!is.finite(x)))stop(“x”中的无穷大或缺失值)Yes,svd函数的开始处会有一个条件。我看到了编辑,但如果有任何INF值,这些值将使用您之前指定的代码进行更新。可能有一种可能性,即svm.fs在x中生成INF值。@Shahzad您无法理解我对trycatch的观点,因为您没有给出一个可重复的示例。希望现在清楚。谢谢。更新代码后,我仍然收到相同的错误消息。虽然我手动检查了数据,但没有任何INF值。@Shahzad可能是因为
svm.fs
函数中的一些计算步骤造成了无穷大的值……这篇文章建议,如果(any(!is.finite(x)))stop(“x”中的无穷大或缺失值)Yes,svd函数的开始处会有一个条件。我看到了编辑,但如果有任何INF值,这些值将使用您之前指定的代码进行更新。可能有一种可能性,即svm.fs在x中生成INF值。@Shahzad您无法理解我对trycatch的观点,因为您没有给出一个可重复的示例。希望现在一切都清楚了。
lapply(list(1,NA,2), function(x){
  tryCatch(
  if (any(!is.finite(x)))
     stop("infinite or missing values in 'x'")
  , error = function(e) e)
       })