2017-05-31 12 views
-2

論理的でなければならないこのコードはsubset.defaultでエラー(SOS1、grepl(M、SOS1)): 'サブセット'

エラー(SOS1、grepl(M、SOS1))を生成しています: 'サブセット' 論理的でなければならない

unikc("900-12004-2501-0008000FOX1 SFOX1", 900-12004-2510-0008000FOX1 SFOX1", 900-12005-0120-0008000FOX1 SFOX')

をしてください含まc("900-12004-2501-000", "900-12004-2510-000", "900-12005-0120-000")

sos1が含まれていますあなたは1からnrow(miss)に変数iランを実行しているので、あなたは、エラーメッセージが表示されます

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

、あなたにsubset操作を変更します論理値を返さない 'grepl()'関数があります。 – R18

+0

'ライブラリ(dplyr)result < - filter(sos1、grepl(m、sos1))'私は自分のrstudioでそれをチェックして試してみます。 – Adamm

+0

@ R18 'grepl()'は論理ベクトルを返します。 @ sap6370 'dput(miss $ Material.Number [1:20]')の出力を貼り付けるだけで、あなたの質問に作業データの例を含めてください。 – LAP

答えて

1

を助けます。ただし、ベクトルunik1uniqueの演算子が適用されているため、nrow(miss)よりも短くなります。 iunik1の長さを超える場合したがって、あなたのループ内の変数mNAgrepl戻るクラスintないlogicalであるNA Sのベクトルとなります。それがエラーの原因です。

あなたはどちらかx <- length(unik1)xを変更したりすることができます - あなたが本当にmissのすべての行をループする必要性 -

result <- subset(sos1, as.logical(grepl(m, sos1))) 
subset`機能 `の2番目のパラメータが論理的であることが必要
関連する問題