if (any(co)) 中的错误:需要 TRUE/FALSE 的缺失值

Posted

技术标签:

【中文标题】if (any(co)) 中的错误:需要 TRUE/FALSE 的缺失值【英文标题】:Error in if (any(co)) : missing value where TRUE/FALSE neededif (any(co)) 中的错误:需要 TRUE/FALSE 的缺失值 【发布时间】:2016-07-01 20:25:09 【问题描述】:

我正在尝试使用 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') 

【问题讨论】:

【参考方案1】:

遇到了类似的问题,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 的名称,您应该一切顺利。

迈克尔

【讨论】:

预测因子作为因子,直接使用公式接口即可,无需手动创建虚拟变量。 @Eduardo 如果我错了,请纠正我,但这样做会自动包含 n-1 个级别的因子,不是吗?在某些情况下,我发现我只想包含某些级别的因子而不是 n-1。迈克尔【参考方案2】:

我有一个类似的问题,我发现我的 x 数据框包含一个带有标签值的列。我通过以下方式删除了该列:

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

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

【讨论】:

以上是关于if (any(co)) 中的错误:需要 TRUE/FALSE 的缺失值的主要内容,如果未能解决你的问题,请参考以下文章

为啥 RDD[Row].map 中的 getInt 会给出“错误:值 getInt 不是 Any 的成员”?

类型 Any 没有下标成员 Swift 3.0 中的错误?

If-else ValueError Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()

查询嵌套 Any() 翻译错误

如何在 Swift 中访问 [String: Any] 字典上的值

if条件在swift ios中的json响应中