Como saber o que está em um vetor e não em outro?

No matlab, existe uma maneira de encontrar os valores em um vetor, mas não no outro.

por exemplo:

x <- c(1,2,3,4) y <- c(2,3,4) 

Existe alguma function que me diga que o valor em x que não está em y é 1?

você pode usar a function setdiff () (set difference):

 > setdiff(x, y) [1] 1 

Sim. Para vetores, você pode simplesmente usar a function %in% ou is.element() .

 > x[!(x %in% y)] 1 

Para uma matriz, existem muitas abordagens de diferença. merge() é provavelmente o mais direto. Sugiro olhar para esta questão para esse cenário .

O arquivo de ajuda em R para setdiff, union, intersect, setequal e is.element fornece informações sobre as funções do conjunto padrão em R.

setdiff(x, y) retorna os elementos de x que não estão em y .

Como observado acima, é uma diferença assimétrica. Então, por exemplo:

 > 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() é uma function complicada porque a saída depende da ordem da input. Você pode, em vez disso, escrever uma function simples como tal que faz exatamente o oposto da intersect . Isso é muito melhor.

 >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