Jeszcze inny inny sposób, z użyciem % w% i logicznych wektorów wspólnych elementów zamiast przecinają się i setdiff. Rozumiem, że faktycznie chcesz porównać dwa wektory , a nie dwie list - a lista jest klasą R, która może zawierać dowolny typ elementu, podczas gdy wektory zawsze zawierają elementy tylko jednego typu, a więc łatwiejsze porównanie jest naprawdę równy. Tutaj elementy są przekształcane na ciągi znaków, ponieważ był to najbardziej nieelastyczny typ elementu, który był obecny.
first <- c(1:3, letters[1:6], "foo", "bar")
second <- c(2:4, letters[5:8], "bar", "asd")
both <- first[first %in% second] # in both, same as call: intersect(first, second)
onlyfirst <- first[!first %in% second] # only in 'first', same as: setdiff(first, second)
onlysecond <- second[!second %in% first] # only in 'second', same as: setdiff(second, first)
length(both)
length(onlyfirst)
length(onlysecond)
#> both
#[1] "2" "3" "e" "f" "bar"
#> onlyfirst
#[1] "1" "a" "b" "c" "d" "foo"
#> onlysecond
#[1] "4" "g" "h" "asd"
#> length(both)
#[1] 5
#> length(onlyfirst)
#[1] 6
#> length(onlysecond)
#[1] 4
# If you don't have the 'gplots' package, type: install.packages("gplots")
require("gplots")
venn(list(first.vector = first, second.vector = second))
Tak jak wspomniano, istnieje wiele opcji do kreślenia diagramów Venna w R. Oto dane wyjściowe za pomocą gplots.
zobacz '?? intersect' i' ?? setdiff' ... – agstudy
patrz [diagramów Venna z R?] (http://stackoverflow.com/q/1428946/59470) – topchef
ISN” t to jest nieprawidłowe użycie terminu "lista" w R? To tylko dwa wektory. To zupełnie nie to samo. – emilBeBri