답변:
기술적으로 목록 은 벡터이지만 해당 용어를 사용하는 사람은 거의 없습니다. "목록"은 여러 모드 중 하나이며 다른 모드는 "논리", "문자", "숫자", "정수"입니다. 벡터라고 부르는 것은 엄격한 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
있습니다. 참조 : 벡터 란 무엇입니까?
목록은 "재귀 적"입니다. 이는 다른 유형의 값, 심지어 다른 목록을 포함 할 수 있음을 의미합니다.
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)
원자 벡터 (목록과 유사하지만 숫자, 논리 및 문자)는 모든 요소가 동일한 유형을 갖는 것으로 알려져 있기 때문에 유용합니다. 이것은 그것들을 매우 빠르게 조작하게합니다.
방금 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 / 벡터 단위가 단어를 사용하는 것과 같은 의미의 벡터입니다.
http://www.burns-stat.com/pages/Tutor/hints_R_begin.html 에서 이와 유사한 입문 질문에 대한 답변을 얻을 수 있습니다 .
가능한 한 빨리 R을 시작하고 실행할 수 있도록 부드러운 소개입니다. 어느 정도 성공합니다.
--- 편집하다: --
더 설명하려는 시도; 위의 참조에서 인용.
원자 벡터
발생할 가능성이있는 원자 벡터에는 세 가지 종류가 있습니다.
- "숫자"
- "논리적"
- "캐릭터"
원자 벡터에 대해 기억해야 할 점은 모든 요소가 한 가지 유형이라는 것입니다.
명부
목록은 구성 요소마다 다른 유형의 항목을 가질 수 있습니다. 목록의 구성 요소는 다른 목록, 원자 벡터 (및 기타 항목)가 될 수 있습니다.
이 링크 도 참조하십시오 .
목록에는 문자, 숫자, 논리 등 여러 데이터 유형이 포함됩니다. 그러나 벡터는 유사한 유형의 데이터 만 포함합니다. 예 :
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.
key
이names
방법 을 사용하여 벡터에 s를 가질 수 있습니다 .