2016-10-27 62 views
1

我有兩組列表,並且需要檢查第一個列表中的每個向量與第二個列表中的相應向量,以查看缺少的內容(我只關心什麼是第一個列表不在第二個列表中)。查找列表中的列表中的缺失值

的樣本數據:

> x <- list(c(100,5,1), c(1,20,5)) 
> y <- list(c(1,2,5,10,20,50,100), c(1,20,50,100)) 

我需要在兩個不公開和使用setdiff(),所以我用一個函數來做到既:

> lapply(x, function(a,b) setdiff(unlist(a),unlist(b)), y) 

預期的結果是什麼爲先第二個設置爲5。不幸的是,這不是拾取x [2]中的5,而是y [2]中的5。相反,這是我的結果:

[[1]] 
numeric(0) 

[[2]] 
numeric(0) 

古怪,它似乎是匹配5至50(也許?),因爲如果我在X [2]改變5到數字像3,是不是在找到y [2],我得到預期的結果:

> x <- list(c(100,5,1), c(1,20,3)) 
> lapply(x, function(a,b) setdiff(unlist(a),unlist(b)), y) 
[[1]] 
numeric(0) 

[[2]] 
[1] 3 

任何想法是怎麼回事?還是有更好的方法來做到這一點?

+0

@Daniel給了我一個很好的答案,但我仍然希望我明白在我原來的嘗試打算與setdiff。 – Frameworker247

+0

添加一些'print'語句來調試你的代碼,你會看到它在做什麼:'lapply(x,function(a,b)print(paste0(「a:」,paste0(unlist a),collapse =「,」))) \t print(paste0(「b:」,paste0(unlist(b),collapse =「,」))) \t setdiff(unlist(a),unlist(b) ) },y)' – SymbolixAU

回答

2

這個怎麼樣?

lapply(seq_along(x), function(i) setdiff(x[[i]], y[[i]]))