子集中的错误。默认值(sos1,grepl(m,sos1)):';子集';必须合乎逻辑

子集中的错误。默认值(sos1,grepl(m,sos1)):';子集';必须合乎逻辑,r,R,此代码正在生成 子集中出错。默认值(sos1,grepl(m,sos1)):“子集”必须是逻辑的 unik包含c(“900-12004-2501-000”、“900-12004-2510-000”、“900-12005-0120-000”) sos1包含c(“900-12004-2501-0008000FOX1”,900-12004-2510-0008000FOX1,900-12005-0120-0008000FOX1-SFOX”) 请帮忙 x <- nrow(miss) unik <

此代码正在生成

子集中出错。默认值(sos1,grepl(m,sos1)):“子集”必须是逻辑的

unik
包含
c(“900-12004-2501-000”、“900-12004-2510-000”、“900-12005-0120-000”)

sos1
包含
c(“900-12004-2501-0008000FOX1”,900-12004-2510-0008000FOX1,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)
    }
}

x您会收到错误消息,因为您运行的变量
i
从1运行到
nrow(miss)
。但是,您的向量
unik1
nrow(miss)短
,由于应用了
unique
运算符。因此,当
i
超过
unik1
的长度时,循环中的变量
m
变为
NA
,并且
grepl
返回一个
NA
s的向量,该向量属于
int
逻辑
类。这就是错误所在或者来自于


您可以将
x
更改为
x
subset
函数的第二个参数需要是逻辑的,并且您有一个不返回逻辑值的
grepl()
函数。
library(dplyr)result@R18
grepl()
确实返回一个逻辑向量。@sap6370请在您的问题中包含一个工作数据示例,通过粘贴
dput(miss$Material.Number[1:20)
的输出即可轻松完成。您尚未定义
x
,因此您的循环可能没有达到预期效果。
result <- subset(sos1, as.logical(grepl(m, sos1)))