В R, как вы проверите вектор, чтобы увидеть, содержит ли он данный элемент?
Для этого предназначены как match()
(возвращает первый вид), так и %in%
(возвращает логические) функции.
v <- c('a','b','c','e')
'b' %in% v
## returns TRUE
match('b',v)
## returns the first location of 'b', in this case: 2
which(v, 'b')
. Следите за порядком аргументов.
is.element()
делает более читаемый код и идентичен %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
is.element(x, y) is identical to x %in% y
. Но я не знаю, почему is.elements
работает при смешивании целых и is.elements
а %in%
- нет
Функция any() делает для читаемого кода
> 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
%in%
: any(1==NA)
возвращает NA
, где 1 %in% NA
возвращает FALSE
.
Вы можете использовать оператор %in%
:
vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false
Также, чтобы найти положение элемента "which" можно использовать как
pop <- c(3,4,5,7,13)
which(pop==13)
и найти элементы, которые не содержатся в целевом векторе, можно сделать это:
pop <- c(1,2,4,6,10)
Tset <- c(2,10,7) # Target set
pop[which(!(pop%in%Tset))]
which
на самом деле предпочтительнее, поскольку дает вам все совпадающие позиции (в виде массива), в отличие от match
. Хотя, возможно, это было не то, о чем просил ОП, в отличие от stackoverflow.com/questions/1169388/…
which
, если вы просто хотите , чтобы найти элементы , которые не в Tset
? Вы можете просто индексировать pop
прямо; pop[!pop%in%Tset]
Мне очень нравятся grep() и grepl() для этой цели.
grep() возвращает вектор целых чисел, указывающий, где совпадают.
yo <- c("a", "a", "b", "b", "c", "c")
grep("b", yo)
[1] 3 4
grepl() возвращает логический вектор с "TRUE" в месте совпадений.
yo <- c("a", "a", "b", "b", "c", "c")
grepl("b", yo)
[1] FALSE FALSE TRUE TRUE FALSE FALSE
Эти функции чувствительны к регистру.
grep
принимает регулярное выражение в качестве первого элемента, поэтому для точного соответствия "b"
использовать ^e$
или add , fixed=TRUE
).
Я буду группировать параметры на основе вывода. Предположим для всех примеров следующий вектор.
v <- c('z', 'a','b','a','e')
Для проверки наличия:
% в%
> 'a' %in% v
[1] TRUE
любой()
> any('a'==v)
[1] TRUE
is.element()
> is.element('a', v)
[1] TRUE
Для поиска первого события:
матч()
> match('a', v)
[1] 2
Для нахождения всех событий в виде вектора индексов:
, который()
> which('a' == v)
[1] 2 4
Для нахождения всех событий как логического вектора:
==
> 'a' == v
[1] FALSE TRUE FALSE TRUE FALSE
Изменить: Удаление grep() и grepl() из списка по причине, упомянутой в комментариях