R의 벡터 속성

빅데이터/R 2018. 12. 9. 15:45

R의 벡터 속성


1. 벡터의 속성

1) 원소의 개수

벡터가 몇 개의 원소(Element)를 가지고 있는지를 원소의 개수라고 하는데 length() 함수를 사용하여 확인 가능합니다.

> v1 = c(27354741)
> length(v1)
[14
cs


2) 원소의 이름

기본적으로 벡터의 원소에 대한 이름은 없으나 이름을 부여할 수 있는데 names() 함수를 사용합니다.

> v1 = c(27354741)
> names(v1)   # 아직 원소에 대한 이름이 없기 때문에 NULL 출력됨
NULL
> names(v1) = c("Kim""Lee""Park""Choi")   # v1의 원소에 대한 각각에 이름을 부여
> names(v1)   #원소의 이름 부여 후에는 names() 함수를 실행하면 각각의 원소에 대한 이름이 출력됨
[1"Kim"  "Lee"  "Park" "Choi"
cs


2. 벡터의 인덱싱

벡터가 가지는 원소들 중에서 일부의 원소를 추출할 때는 대괄호([])를 사용하며, 대괄호 안에 추출을 원하는 원소의 위치(index)를 수치로 입력하면 됩니다. R에서는 다른 프로그래밍 언어와 다르게 벡터의 첫 번째 원소에 대한 인덱스값이 0이 아니라 1부터 시작합니다.

> weight = c(5781654972)
> weight[1]    # 첫 번째 인덱스 위치의 값을 출력
[157
> weight[2]
[181
> weight[c(1,4,5)]    # 1, 4, 5 인덱스 위치의 값을 출력
[157 49 72
> weight[2:4]    # 2~4 인덱스 위치의 값을 출력
[181 65 49
> weight[-c(1,4,5)]    # 앞에 마이너스가 붙어 있기 때문에 1, 4, 5 인덱스 위치의 값을 제외한 나머지를 출력
[181 65
cs


3. 벡터의 연산

R의 강점은 벡터의 연산이 편리하고 빠르다는 점입니다. 수치형 벡터로 된 두 개 이상의 벡터 간의 사칙연산이 가능합니다.

1) 벡터의 길이가 동일한 경우

벡터들간의 사칙연산이 가능하며 최종적인 결과는 벡터가 됩니다. 벡터들 간의 연산이 될 때에는 각 벡터에 있는 동일한 위치의 값들끼리 연산이 됩니다.

> v1 = 1:3
> v2 = 4:6
> v1;v2
[11 2 3
[14 5 6
> v1 + v2   # 동일한 인덱스 위치의 값들끼리 더해짐
[15 7 9
> v1 - v2
[1-3 -3 -3
> v1 * v2
[1]  4 10 18
> v1 / v2
[10.25 0.40 0.50
cs


2) 벡터의 길이가 동일하지 않은 경우

벡터 자체는 변하지 않지만 연산과정에서 원소의 개수가 적은 쪽의 벡터는 원소 개수가 많은 쪽의 벡터와 동일하게 원소의 개수를 맞춥니다. (원소 개수가 차이나는 만큼 임시적으로 데이터가 생성됩니다)

> v1 = c(12)    # v1에 v2의 원소 개수에 맞춰 1, 2가 한 번 더 생성되어 (1, 2, 1, 2)가 된 다음 연산됨
> v2 = c(1234)
> v1 + v2
[12 4 4 6
cs


v1에는 2개의 데이터, v2에는 4개의 데이터가 있을때 둘을 연산했을 경우 v1의 데이터는 추가적으로 2개가 더 생성되어 4개가 됩니다. 새롭게 생성되는 2개의 데이터는 v1이 가지고 있는 값을 순차적으로 새롭게 생성되는 데이터에 지정하게 됩니다. 이러한 규칙을 R에서는 재사용 규칙이라고 합니다.


> w1 = 1:3
> w2 = 1:10
> w1 + w2
 [1]  2  4  6  5  7  9  8 10 12 11
Warning message:
In w1 + w2 :
  longer object length is not a multiple of shorter object length
cs


위와 같은 경우 w1은 재사용 규칙에 의해 (1, 2, 3, 1, 2, 3, 1, 2, 3, 1)의 값을 갖게 되며 연산 결과가 출력되지만 두 벡터의 개수가 배수 관계가 아니므로 경고 메시지(Warnig message)가 출력됩니다. 이는 사용자가 원하는 결과가 아닐지도 모르니 잘 살펴보라는 의미의 경고 메시지일 뿐이며 오류가 아닙니다.





'빅데이터 > R' 카테고리의 다른 글

R의 배열과 리스트  (0) 2018.12.10
R의 요인과 행렬  (0) 2018.12.09
R에서 백터 생성 하기  (0) 2018.12.09
R의 데이터 유형의 우선순위와 강제변환  (0) 2018.12.09
R의 연산자와 데이터의 유형  (2) 2018.11.30