что идет после того, что в списке - PullRequest
0 голосов
/ 05 февраля 2019

Я новичок в работе со списками в R - данный список из 3 строковых векторов, я хотел бы знать либо TRUE, либо FALSE любые строки, где foo появляется после bar (даже если этопроисходит несколько раз)

Учитывая список:

 x <- list(c("foo", "bar", "baz"),c("bar", "foo", "baz", "foo"),c("baz", "bar", "foo", "bar", "foo"))

> x
[[1]]
[1] "foo" "bar" "baz"

[[2]]
[1] "bar" "foo" "baz" "foo"

[[3]]
[1] "baz" "bar" "foo" "bar" "foo"

Как можно получить вывод об использовании индекса списка в R?

[1] FALSE TRUE TRUE?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Если вы имеете в виду первый экземпляр каждого из foo и bar (то есть, который появляется первым)

sapply(x, function(vec) min(which(vec == 'foo')) > min(which(vec=='bar')))

Если вы имеете в виду, что any экземпляр foo появляется после любой экземпляр бар

sapply(x, function(vec) max(which(vec == 'foo')) > min(which(vec=='bar')))

0 голосов
/ 05 февраля 2019

Один из вариантов - match, чтобы получить индекс первого вхождения 'foo' и 'bar' и использовать его для создания логического vector

sapply(x, function(y) {i1 <- match(c("foo", "bar"), y); i1[1] > i1[2]})
#[1] FALSE  TRUE  TRUE

или создания логическогоvector с which

sapply(x, function(y) which(y == "foo")[1] > which(y == "bar")[1])

или используйте регулярное выражение после paste элементов

grepl("bar.*foo", sapply(x, paste, collapse = ' '))
#[1] FALSE  TRUE  TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...