Matlab'de bir vektördeki değerleri bulmanın, diğerinde olmayan bir yol vardır.
Örneğin:
x <- c(1,2,3,4)
y <- c(2,3,4)
İçinde x
olmayan değerin y
1 olduğunu söyleyen herhangi bir işlev var mı?
Matlab'de bir vektördeki değerleri bulmanın, diğerinde olmayan bir yol vardır.
Örneğin:
x <- c(1,2,3,4)
y <- c(2,3,4)
İçinde x
olmayan değerin y
1 olduğunu söyleyen herhangi bir işlev var mı?
Yanıtlar:
Evet. Vektörler için sadece %in%
operatörü veya is.element()
işlevi kullanabilirsiniz.
> x[!(x %in% y)]
1
Bir matris için birçok farklı yaklaşım vardır. merge()
muhtemelen en yalındır. Bu senaryo için bu soruya bakmanızı öneririm .
Setdiff, union, intersect, setequal ve is.element için R'deki yardım dosyası , R'deki standart set fonksiyonları hakkında bilgi sağlar.
setdiff(x, y)
x
içinde olmayan öğeleri döndürür y
.
Yukarıda belirtildiği gibi, asimetrik bir farktır. Yani mesela:
> x <- c(1,2,3,4)
> y <- c(2,3,4,5)
>
> setdiff(x, y)
[1] 1
> setdiff(y, x)
[1] 5
> union(setdiff(x, y), setdiff(y, x))
[1] 1 5
x[is.na(match(x,y))]
setdiff()
zor bir işlevdir çünkü çıktı, girdinin sırasına bağlıdır. Bunun yerine, tam tersini yapan basit bir işlev yazabilirsiniz intersect
. Bu çok daha iyi.
>difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
#Now lets test it.
>x <- c(1,2,3,4)
>y <- c(2,3,4,5)
>difference(x,y)
[1] 1 5
Eğer:
x <- c(1,2,3,4)
y <- c(2,3,4)
Bu ifadelerden herhangi biri:
setdiff(x, y)
x[!(x %in% y)]
x[is.na(match(x,y))]
x[!(is.element(x,y))]
doğru cevabı verecektir [1] 1
gol değerler / karakterleri bulmak için ise, x
mevcut olmadığı, y
.
Bununla birlikte, yukarıdaki ifadeleri uygulamak zor olabilir ve vektörün doğasına ve ifadedeki x ve y'nin konumuna bağlı olarak istenmeyen sonuçlar verebilir. Örneğin, eğer:
x <- c(1,1,2,2,3,4)
y <- c(2,3,4)
ve amaç sadece içinde x
bulunmayan y
veya tam tersi olan benzersiz değerleri / karakterleri bulmaktır . Bu ifadelerden herhangi birini uygulamak yine de doğru cevabı verecektir [1] 1
:
union(setdiff(x, y), setdiff(y, x))
Jeromy Anglim'in katkısına teşekkürler
VEYA:
difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
difference(y,x)
Workhouse katkılarıyla
setdiff(x,y)
vesetdiff(y,x)
aynı değildir.