Почему множественная опция в функции vunion пакета vecsets не работает для векторов символов? - PullRequest
0 голосов
/ 01 сентября 2018

Когда я запускаю код:

library(vecsets)
p <- c("a","b")
q <- c( "a")
vunion(p,q, multiple = TRUE)

Я получаю результат:

[1] "a" "b"

Но я ожидаю, что результат будет

vunion(p,q, multiple = TRUE)
[1] "a" "b" "a"

Я также не понимаю, результат, представленный в примере пакета vesect. Пример показывает:

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

vunion(x,y,multiple=TRUE) 
[1]  2  3  3  4  5 NA  1  3  3  2 NA  4

Но если мы проверим

length(x)+length(y); length(vunion(x,y))
[1] 18
[1] 12

у нас разные длины, но я думаю, что они должны быть одинаковыми. Обратите внимание, например, что 5 появляется только один раз.

Что здесь происходит? Может кто-нибудь объяснить?

1 Ответ

0 голосов
/ 01 сентября 2018

Я думаю, что документация пакета vecset ( ссылка ) достаточно хорошо описывает это поведение:

Функция base::union удаляет дубликаты по теории алгебраических множеств. vunion не делает, и поэтому возвращает столько повторяющихся элементов, сколько есть во либо входном векторе ( не сумма их входных данных.) Короче говоря, vunion совпадает с vintersect(x,y) + vsetdiff(x,y) + vsetdiff(y,x).

Правда, вы должны внимательно читать. Я подчеркнул важную часть. Проблема не в символьных или числовых векторах, а в том, повторяются ли элементы в одном и том же векторе или нет. Рассмотрим p1 против p2 в следующем примере. Результат из vunion будет иметь столько же, сколько или p или q, поэтому мы ожидаем 1 "а" в первой части и два "а" во второй части; оба раза мы ожидаем только 1 "b":

library(vecsets)
q <- c("a", "b")

p1 <- c("a", "b")
vunion(p1, q, multiple = TRUE)
[1] "a" "b" 

p2 <- c("a", "a", "b")
vunion(p2, q, multiple = TRUE)
[1] "a" "b" "a"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...