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
的后缀,其中LEVEL
是factor
级别的名称。然而,原始特征仍被保留,因此您需要在建模之前或在建模步骤中删除这些特征(例如,在公式参考中,使用 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 的成员”?
If-else ValueError Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()