子集中的错误。默认值(sos1,grepl(m,sos1)):';子集';必须合乎逻辑
此代码正在生成 子集中出错。默认值(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 <
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
更改为xsubset
函数的第二个参数需要是逻辑的,并且您有一个不返回逻辑值的grepl()
函数。library(dplyr)result@R18grepl()
确实返回一个逻辑向量。@sap6370请在您的问题中包含一个工作数据示例,通过粘贴dput(miss$Material.Number[1:20)
的输出即可轻松完成。您尚未定义x
,因此您的循环可能没有达到预期效果。
result <- subset(sos1, as.logical(grepl(m, sos1)))