R에서 벡터와 목록 데이터 유형의 차이점은 무엇입니까?


127

R에서 벡터와 목록 데이터 유형의 주요 차이점은 무엇입니까? 이 두 데이터 유형을 사용하거나 사용하지 않을 때의 장단점은 무엇입니까?

데이터 유형의 사용 사례를 보여주는 예제를보고 싶습니다.

답변:


77

기술적으로 목록 벡터이지만 해당 용어를 사용하는 사람은 거의 없습니다. "목록"은 여러 모드 중 하나이며 다른 모드는 "논리", "문자", "숫자", "정수"입니다. 벡터라고 부르는 것은 엄격한 R 용어로 "원자 벡터"입니다.

 aaa <- vector("list", 3)
 is.list(aaa)   #TRUE
 is.vector(aaa)  #TRUE

목록은 "재귀 적"유형 (벡터)이지만 원자 벡터는 다음과 같습니다.

is.recursive(aaa)  # TRUE
is.atomic(aaa)  # FALSE

재귀 적, 원자 적 또는 차원 속성 (행렬 및 배열)이 있는지 여부에 따라 다른 함수로 데이터 객체를 처리합니다. 그러나 다른 데이터 구조의 "장점 및 단점"에 대한 논의가 SO에 대해 충분히 집중된 질문이라고 확신하지 않습니다. Tommy가 말한 것에 덧붙여, 목록이 임의의 수의 다른 벡터를 보유 할 수있는 것 외에도 구조를 정의하는 차원 속성을 갖는 특정 유형의 목록 인 데이터 프레임의 가용성이 있습니다. 실제로 접힌 원자 객체 인 행렬 및 배열과 달리 데이터 프레임은 요인 유형을 포함하여 다양한 유형을 보유 할 수 있습니다.

이름 이외의 속성이있을 때 is.vector함수가 반환 한다는 경고도 FALSE있습니다. 참조 : 벡터 란 무엇입니까?


54

목록은 "재귀 적"입니다. 이는 다른 유형의 값, 심지어 다른 목록을 포함 할 수 있음을 의미합니다.

x <- list(values=sin(1:3), ids=letters[1:3], sub=list(foo=42,bar=13))
x # print the list
x$values   # Get one element
x[["ids"]] # Another way to get an element
x$sub$foo  # Get sub elements
x[[c(3,2)]]  # Another way (gets 13)
str(x)     # A "summary" of the list's content

목록은 R에서 데이터 세트를 나타내는 데 사용됩니다. data.frame클래스는 본질적으로 각 요소가 특정 유형의 열인 목록입니다.

또 다른 용도는 모델을 나타낼 때입니다.의 결과 lm는 유용한 개체가 포함 된 목록을 반환합니다.

d <- data.frame(a=11:13, b=21:23)
is.list(d) # TRUE
str(d)

m <- lm(a ~ b, data=d)
is.list(m) # TRUE
str(m)

원자 벡터 (목록과 유사하지만 숫자, 논리 및 문자)는 모든 요소가 동일한 유형을 갖는 것으로 알려져 있기 때문에 유용합니다. 이것은 그것들을 매우 빠르게 조작하게합니다.


20

방금 R에 익숙해졌지만 C / Java / Ruby / PHP / Python 배경에서 온 사람으로서 제가 생각하는 방식은 다음과 같습니다.

A list는 실제로 배열 + 해시 맵입니다. PHP 연관 배열입니다.

> foo = list(bar='baz')
> foo[1]
'baz'
> foo$bar
'baz'
> foo[['bar']]
'baz'

A vector는 고정형 배열 / 목록입니다. 연결 목록처럼 생각하십시오-연결 목록에 다른 항목을 넣는 것은 어쨌든 안티 패턴이기 때문입니다. SIMD / MMX / 벡터 단위가 단어를 사용하는 것과 같은 의미의 벡터입니다.


3
keynames방법 을 사용하여 벡터에 s를 가질 수 있습니다 .
gokul_uf

9

http://www.burns-stat.com/pages/Tutor/hints_R_begin.html 에서 이와 유사한 입문 질문에 대한 답변을 얻을 수 있습니다 .

가능한 한 빨리 R을 시작하고 실행할 수 있도록 부드러운 소개입니다. 어느 정도 성공합니다.

--- 편집하다: --

더 설명하려는 시도; 위의 참조에서 인용.

원자 벡터

발생할 가능성이있는 원자 벡터에는 세 가지 종류가 있습니다.

  • "숫자"
  • "논리적"
  • "캐릭터"

원자 벡터에 대해 기억해야 할 점은 모든 요소가 한 가지 유형이라는 것입니다.

명부

목록은 구성 요소마다 다른 유형의 항목을 가질 수 있습니다. 목록의 구성 요소는 다른 목록, 원자 벡터 (및 기타 항목)가 될 수 있습니다.

링크 도 참조하십시오 .


2
비추천 : 최소한 원래 질문에 답하는 해당 웹 사이트의 특정 섹션을 알려 주어야합니다.
nbro

2

목록에는 문자, 숫자, 논리 등 여러 데이터 유형이 포함됩니다. 그러나 벡터는 유사한 유형의 데이터 만 포함합니다. 예 :

scores <- c(20,30,40,50)
student <- c("A","B","C","D")
sc_log <- c(TRUE,FALSE,FALSE,TRUE)

목록 :

mylist <- list(scores,student,sc_log)
# search for class of mylist vector 
#check structure of mylist using str() function.
str(mylist)
[1] list of 3
[1] $:num [1:4] 20 30 40 50
[2] $:chr [1:4] "A""B""C""D"
[3] $:log [1:4] TRUE FALSE FALSE TRUE

이는 mylist에서 숫자, 문자 및 논리와 같은 여러 데이터 유형을 포함하는 목록을 의미하지만 벡터에는 해당 벡터의 모든 요소에 대한 단일 데이터 유형이 있습니다.

예 :

벡터의 경우 :

vector1 <- c(1,2,3,4)
Class(vector1)
[1] "Numeric"

#which means all elements of vector containing single data type that is numeric only.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.