subset.default(sos1,grepl(m,sos1))出错:'子集'必须合乎逻辑

时间:2017-05-31 06:48:52

标签: r

此代码正在生成

  

subset.default(sos1,grepl(m,sos1))中的错误:'子集'必须是合乎逻辑的

unik包含c("900-12004-2501-000", "900-12004-2510-000", "900-12005-0120-000")

sos1包含c("900-12004-2501-0008000FOX1 SFOX1", 900-12004-2510-0008000FOX1 SFOX1", 900-12005-0120-0008000FOX1 SFOX')

请帮助

x <- nrow(miss)
unik <- unique(miss$Material.Number)
unik1 <- as.character(unik)
sos <- read.xlsx("trprod.xlsx", sheet = 1)
sos1 <- as.character(sos$Source.of.Supply)

output <- c()
for (i in 1:x) 
  {
    m <- (unik1[i])
    result <- subset(sos1, grepl(m, sos1))
    if (length(result) == 0 ){
      print('in if')
      output <- c(output, m)
    }
}

1 个答案:

答案 0 :(得分:1)

您收到错误消息,因为正在运行的变量i从1运行到nrow(miss)。由于应用了unik1运算符,因此您的向量nrow(miss)unique短。因此,当i超过unik1的长度时,循环中的变量m变为NAgrepl会返回NA的向量该类int而不是logical。这就是错误的来源。

您可以将x更改为x <- length(unik1)或 - 您确实需要遍历miss的所有行 - 将subset操作更改为

result <- subset(sos1, as.logical(grepl(m, sos1)))