unlist ()가 R에서 날짜를 죽이는 이유


84

날짜 목록을 삭제하면 다시 숫자로 바뀝니다. 정상인가요? 다른 이름으로 다시 적용하는 것 이외의 해결 방법은 무엇입니까?

> dd <- as.Date(c("2013-01-01", "2013-02-01", "2013-03-01"))
> class(dd)
[1] "Date"
> unlist(dd)
[1] "2013-01-01" "2013-02-01" "2013-03-01"
> list(dd)
[[1]]
[1] "2013-01-01" "2013-02-01" "2013-03-01"

> unlist(list(dd))
[1] 15706 15737 15765

이것은 버그입니까?


2
From ?unlist: 가능한 경우 목록 요소는 목록 해제 중에 공통 모드로 강제 변환되므로 결과는 종종 문자형 벡터로 끝납니다. 벡터는 계층 구조에서 가장 높은 구성 요소 유형으로 강제 변환됩니다. NULL <raw <logical <integer <real <complex <character <list <expression : pairlists are treat as lists.
Arun

6
그래 나는 그들이 공통 모드에서 이미있어 .... 설명서를 읽어했다
토마스 브라운

1
나는 그 행동이 정상이 아니라는 데 동의합니다. 그러나 항상 사용중인 함수에 대한 문서를 읽는 것이 좋습니다.
Arun

7
@Arun 왜 그게 관련이 있는지 모르겠습니다. 날짜 벡터는 내부적으로 정수이므로 문제는 실제로 속성이 제거된다는 것입니다. 문서에는 이것을 명시 적으로 언급하지 않지만 unlist가 일반적으로 속성을 보존 할 수있는 방법은 없습니다.
hadley 2013 년

1
@Arun yes, unlist목록이 아닌 입력을 변경하지 않고 반환 하기 때문 입니다. 나에게 전혀 모호해 보이지는 않지만 문서에는 속성에 어떤 일이 발생하는지 언급해야합니다.
hadley 2013 년

답변:


94

do.call목록으로 "무언가를 수행"하는 편리한 기능입니다. 우리의 경우에는 c. 그것은에 드문 일이 아니에요 cbind또는 rbind하나의 큰 data.frame으로 목록에서 data.frames.

여기서 우리가하는 일은 실제로 dd목록의 요소를 연결하는 것입니다 . 이것은 c(dd[[1]], dd[[2]]). 참고 c함수로 또는 문자로 제공 할 수 있습니다.

> dd <- list(dd, dd)
> (d <- do.call("c", dd))
[1] "2013-01-01" "2013-02-01" "2013-03-01" "2013-01-01" "2013-02-01" "2013-03-01"
> class(d) # proof that class is still Date
[1] "Date"

7
이 답변은 수행중인 작업을 설명하는 세부 정보를 추가하면 나중에 다른 사람들이 더 읽기 쉽게 찾을 수 있다면 크게 향상 될 것입니다.
Dinre 2013 년

"주변에 c?
Alessandro Jacopson

3
@AlessandroJacopson 따옴표는 필요하지 않지만 (의 도움말 파일을 참조하십시오) 따옴표가 필요한 do.call함수에는 때때로 편리 할 수 ​​있습니다 do.call("+", as.list(c(1, 1))).
Roman Luštrik

1
또 다른 좋은 접근 방식과 벡터에 목록에서 변환을 수행하는 것입니다 Reduce즉, Reduce("c",dd)
오리올 프라

2
코드 주셔서 감사합니다. 질문에 대답하지 않습니다. tho : 왜 unlist kill date입니까?
dfrankow

0

또는 purrr 을 사용하여 날짜 목록을 벡터 보존 유형으로 평면화합니다.

list(as.Date(c("2013-01-01", "2013-02-01", "2013-03-01"))) %>% purrr::reduce(c)

결과

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