Test of een vector een bepaald element bevat

Hoe controleer je of een vector een bepaalde waarde bevat?


Antwoord 1, autoriteit 100%

Zowel de match()(retourneert de eerste weergave) als de %in%(retourneert een Boolean) functies zijn hiervoor ontworpen.

v <- c('a','b','c','e')
'b' %in% v
## returns TRUE
match('b',v)
## returns the first location of 'b', in this case: 2

Antwoord 2, autoriteit 35%

is.element()zorgt voor een beter leesbare code en is identiek aan %in%

v <- c('a','b','c','e')
is.element('b', v)
'b' %in% v
## both return TRUE
is.element('f', v)
'f' %in% v
## both return FALSE
subv <- c('a', 'f')
subv %in% v
## returns a vector TRUE FALSE
is.element(subv, v)
## returns a vector TRUE FALSE

Antwoord 3, autoriteit 17%

Ik zal de opties groeperen op basis van output. Neem voor alle voorbeelden de volgende vector aan.

v <- c('z', 'a','b','a','e')

Voor het controleren van de aanwezigheid:

%in%

> 'a' %in% v
[1] TRUE

elke()

> any('a'==v)
[1] TRUE

is.element()

> is.element('a', v)
[1] TRUE

Voor het vinden van de eerste keer:

overeenkomst()

> match('a', v)
[1] 2

Voor het vinden van alle voorkomens als vector van indices:

welke()

> which('a' == v)
[1] 2 4

Voor het vinden van alle voorkomens als logische vector:

==

> 'a' == v
[1] FALSE  TRUE FALSE  TRUE FALSE

Bewerken:
Verwijderen van grep()en grepl()uit de lijst om de reden vermeld in opmerkingen


Antwoord 4, autoriteit 13%

De functie any()zorgt voor leesbare code

> w <- c(1,2,3)
> any(w==1)
[1] TRUE
> v <- c('a','b','c')
> any(v=='b')
[1] TRUE
> any(v=='f')
[1] FALSE

Antwoord 5, autoriteit 7%

U kunt de operator %in%gebruiken:

vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false

Antwoord 6, autoriteit 4%

Ook om de positie te vinden van het element “welke” kan worden gebruikt als

pop <- c(3,4,5,7,13)
which(pop==13)

en om de elementen te vinden die niet in de doelvector zitten, kan men dit doen:

pop <- c(1,2,4,6,10)
Tset <- c(2,10,7)   # Target set
pop[which(!(pop%in%Tset))]

Antwoord 7, autoriteit 2%

Ik hou echt van grep() en grepl() voor dit doel.

grep() retourneert een vector van gehele getallen, die aangeven waar overeenkomsten zijn.

yo <- c("a", "a", "b", "b", "c", "c")
grep("b", yo)
[1] 3 4

grepl() retourneert een logische vector, met “TRUE” op de locatie van overeenkomsten.

yo <- c("a", "a", "b", "b", "c", "c")
grepl("b", yo)
[1] FALSE FALSE  TRUE  TRUE FALSE FALSE

Deze functies zijn hoofdlettergevoelig.

Other episodes