if(any(co)){:缺少值需要TRUE / FALSE时出错

时间:2016-03-16 05:34:22

标签: r svm na

我正在尝试使用R中的SVM为一个类分类构建模型。我已使用is.na(x)验证我的所有对象都没有NA值。尽管有很多关于这个主题的帖子,我仍然会收到我无法找到解决方案的错误。

d<-read.xlsx("deals.xlsx", sheetIndex=1, rowIndex=NULL,
         startRow=2, endRow=200, colIndex=(1:5),
         as.data.frame=T, header=T, colClasses=NA,
         keepFormulas=FALSE, encoding="unknown")

d<-subset(d, res=="yes")
x <- subset(d, select = -res) #make x variables
y <- (d$res) #make y variable(dependent)

model <- svm(x,y,type='one-classification') 

2 个答案:

答案 0 :(得分:3)

遇到类似的问题,this thread很有帮助。简而言之,我的错误与类Date的两个预测变量以及类factor的两个预测变量有关。我正在使用{caret}并为SVM调用{kernlab}模型。你可以删除这些变量,但是如果你想保留它们(或者从它们派生的变量):

链接线程包含一个建议,用于从Date变量中创建数字变量,以保持类似日期的建模功能。

对于存储为因子的预测变量,您可以尝试类似下面的函数。该函数将采用当前factor变量名称,然后添加后缀_LEVEL,其中LEVELfactor级别的名称。但是,原始功能仍然保留,因此您需要在建模之前或建模步骤中删除这些功能(例如,在公式参考中,将这些列排除在x = df[, -c(1:2)]之外)。

功能:

for (i in colnames(df[, sapply(df, is.factor)])){
    for (level in unique(df[, i])){
        df[paste(i, level, sep = "_")] = 
            as.integer(ifelse(df[, i] == level, 1, -1))
    }
}

df替换为data.frame的名称,你应该好好去。

迈克尔

答案 1 :(得分:0)

我有一个类似的问题,我发现我的x数据框包含一个标有值的列。我通过执行以下操作删除了该列:

x<- x[,-1] #where 1 is the number of the column

如果您按照此示例(One-class classification with SVM in R)并输出数据集,您将看到初始数据集df包含标记值,然后x数据框不包含,y仅包含标记变量。