R의 python dict에 해당


82

R에서 python dict와 동등하게 만들고 싶습니다. 기본적으로 python에서는 다음과 같습니다.

visited = {}

if atom_count not in visited:
  Do stuff
  visited[atom_count] = 1

아이디어는 특정 atom_count를 본 경우 방문한 것입니다 [atom_count] = 1입니다. 따라서 해당 atom_count를 다시 보면 "Do Stuff"를 수행하지 않습니다. Atom_Count는 정수입니다.

감사!


5
hash거의 Python과 유사한 액세스 기능이 있는 R 패키지 를 참조하십시오 .
Hans W.

@Chase 비용은 O (n)입니다. Dict 요소 액세스는 일정합니다.
anilbey

답변:


72

R의 python dict에 가장 가까운 것은 단순히 목록입니다. 대부분의 R 데이터 유형과 마찬가지로 목록에는 목록이 이름-값 쌍의 집합처럼 작동하도록 허용 할 수있는 names 속성이있을 수 있습니다.

> l <- list(a = 1,b = "foo",c = 1:5)
> l
$a
[1] 1

$b
[1] "foo"

$c
[1] 1 2 3 4 5

> l[['c']]
[1] 1 2 3 4 5
> l[['b']]
[1] "foo"

이제 일반적인 면책 조항에 대해 : 정확히 동일 하지는 않습니다 . 차이가있을 것입니다. 그래서 당신은 말 그대로 파이썬에서 dict를 사용하는 것과 똑같은 방식으로 목록을 사용하려고 시도하는 것에 실망하게 될 것입니다.


그런 목록을 어떻게 프로그래밍 방식으로 반복 할 수 있습니까? 순진한 사람은 l$names(l)[1]분명히 실패합니다. l[which()]
나도

@MikePalmice for거의 모든 언어의 옵션 인 루프를 제외하고 는 lapply. ,와 같은 다른 구문을 가진 관련 항목이 있으며 많은 기능적 프로그래밍 항목에 대한 Map전체 패키지가 있습니다.
joran

@ MikePalmice, 나는 l[[names(l)[1]]작동해야 한다고 생각 합니다. 어쨌든 l[[1]]이름을 사용하지 않고 다음과 같이 반복 할 수 있습니다 . 단일 대괄호 []는 목록을 반환하고 이중 대괄호 [[]]는 목록 내의 개체를 반환합니다.
Javi_VM

1
와우, 다른 언어로 된 그런 간단한 것은 r에서 어렵습니까? 변수에 문자열이 포함되어 있다고 가정 해 보겠습니다. 키로 만들려고하면 변수 값 대신 변수 이름을 키 이름으로 선택합니다.
wondim

1
@wondim, 하위 집합 names(list) <- vector_of names할당이 작동 하는 변수에서 목록 항목 이름을 설정할 수 있습니다 names(list)[1] <- "foo". 을 (를) 참조하십시오 setNames().
joran

5

해시 테이블 (새로운 환경 만들기)을 사용하는 것이 문제의 해결책이 될 수 있다고 생각합니다. 이 작업을 수행하는 방법을 입력했지만 어제 talkstats.com에서 입력했습니다.

사전이 크고 단 두 개의 열만 있다면 이것이 갈 길일 수 있습니다. 다음은 샘플 R 코드가있는 talkstats 스레드에 대한 링크입니다.

해시 테이블 링크


노트 data.table와 R의 자체 명명 된 벡터 조회는 이번 이후로 속도가 크게 향상되었습니다.
Tyler Rinker 2014

4

귀하의 경우와 같이 "사전"이 동일한 유형의 값을 저장하도록하려면 벡터를 사용하고 각 요소의 이름을 지정하면됩니다.

> l <- c(a = 1, b = 7, f = 2)
> l
a b f 
1 7 2

"키"에 액세스하려면을 사용하십시오 names.

> names(l)
[1] "a" "b" "f"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.