R Language
조작 설정
수색…
비고
집합에는 고유 한 요소 각각에 대해 하나의 복사본 만 포함됩니다. 다른 프로그래밍 언어와 달리, 기본 R에는 집합에 대한 전용 데이터 형식이 없습니다. 대신 R은 별개의 요소 만 사용하여 집합과 같은 벡터를 처리합니다. 이것은 set 연산자, setdiff
, intersect
, union
, setequal
및 %in%
됩니다. v %in% S
경우 S
만 집합으로 처리되지만 벡터 v
는 처리되지 않습니다.
R의 실제 세트 데이터 유형의 경우, Rcpp 패키지는 몇 가지 옵션을 제공합니다.
벡터 쌍에 대한 연산자 설정
세트 비교
R에서 벡터는 중복 된 요소를 포함 할 수 있습니다.
v = "A"
w = c("A", "A")
그러나 집합에는 각 요소의 복사본이 하나만 포함됩니다. R은 별개의 요소만을 취하여 집합과 같은 벡터를 처리하므로 위의 두 벡터는 동일하게 간주됩니다.
setequal(v, w)
# TRUE
집합 결합
주요 기능은 자연적인 이름을 가지고 있습니다 :
x = c(1, 2, 3)
y = c(2, 4)
union(x, y)
# 1 2 3 4
intersect(x, y)
# 2
setdiff(x, y)
# 1 3
이것들은 모두 같은 페이지, 즉 ?union
에 문서화되어 있습니다.
벡터에 대한 멤버십 설정
%in%
연산자는 벡터와 세트를 비교합니다.
v = "A"
w = c("A", "A")
w %in% v
# TRUE TRUE
v %in% w
# TRUE
왼쪽에있는 각 요소는 개별적으로 처리되며 오른쪽에있는 벡터와 연결된 집합의 멤버십에 대해 테스트됩니다 (모든 별개 요소로 구성됨).
평등 테스트와 달리 %in%
항상 TRUE
또는 FALSE
반환 FALSE
.
c(1, NA) %in% c(1, 2, 3, 4)
# TRUE FALSE
문서는 ?`%in%`
있습니다.
벡터의 직교 또는 "십자가"곱
(x, y) 형태의 모든 벡터를 찾기 위해 x는 벡터 X에서 그리고 Y는 Y expand.grid
하기 위해 expand.grid
를 사용 expand.grid
:
X = c(1, 1, 2)
Y = c(4, 5)
expand.grid(X, Y)
# Var1 Var2
# 1 1 4
# 2 1 4
# 3 2 4
# 4 1 5
# 5 1 5
# 6 2 5
결과는 전달 된 각 벡터에 대해 하나의 열이있는 data.frame입니다. 종종 우리는 벡터의 "그리드"를 확장하기보다는 세트의 데카르트 곱을 취하고 싶습니다. 우리는 unique
lapply
및 do.call
사용할 수 있습니다.
m = do.call(expand.grid, lapply(list(X, Y), unique))
# Var1 Var2
# 1 1 4
# 2 2 4
# 3 1 5
# 4 2 5
조합에 기능 적용
결과 조합 f(x,y)
각각에 함수를 적용하려면 다른 열로 추가 할 수 있습니다.
m$p = with(m, Var1*Var2)
# Var1 Var2 p
# 1 1 4 4
# 2 2 4 8
# 3 1 5 5
# 4 2 5 10
이 접근법은 우리가 필요로하는만큼 많은 벡터에 대해 작동하지만, 2의 특수한 경우에는 때때로 행렬에 결과를 저장하는 것이 더 적합합니다. 이는 outer
하여 수행 할 수 있습니다.
uX = unique(X)
uY = unique(Y)
outer(setNames(uX, uX), setNames(uY, uY), `*`)
# 4 5
# 1 4 5
# 2 8 10
관련 개념 및 도구는 조합론 항목을 참조하십시오.
고유 한 / 중복 된 사본 만들기 / 벡터에서 고유 한 요소 선택
unique
상품 중복은 결과의 각 요소가 고유하도록 중복됩니다 (한 번만 나타남).
x = c(2, 1, 1, 2, 1)
unique(x)
# 2 1
값은 처음 나타난 순서대로 반환됩니다.
각 중복 duplicated
태그에 duplicated
태그 표시 :
duplicated(x)
# FALSE FALSE TRUE TRUE TRUE
anyDuplicated(x) > 0L
은 벡터에 중복 된 것이 있는지를 빠르게 확인할 수있는 방법입니다.
벡터에 대한 세트 중첩 / 벤 다이어그램 측정
두 세트의 몇 요소가 겹치는 지 계산하려면 사용자 정의 함수를 작성할 수 있습니다.
xtab_set <- function(A, B){
both <- union(A, B)
inA <- both %in% A
inB <- both %in% B
return(table(inA, inB))
}
A = 1:20
B = 10:30
xtab_set(A, B)
# inB
# inA FALSE TRUE
# FALSE 0 10
# TRUE 9 11
다양한 패키지에 의해 제공되는 Venn 다이어그램을 사용하여 여러 세트의 중복 카운트를 시각화 할 수 있습니다.