2011-09-29 2 views
9

this 질문에 (주로) 대답하는 과정에서 나는 전에 본적이 있었던 것처럼 느껴지는 것을 발견했습니다. 의 당신이 목록을 가지고 있다고 가정 해 봅시다 :as.character()를 통해 목록에 문자를 강제 할 때이 동작이 왜 발생합니까?

l <- list(a = 1:3, b = letters[1:3], c = runif(3)) 

다양한 형태 l을 강요하려고하면 오류 반환 : 그러나

> as.numeric(l) 
Error: (list) object cannot be coerced to type 'double' 
> as.logical(l) 
Error: (list) object cannot be coerced to type 'logical' 

을, 나는 분명히 난 그냥, 문자 목록을 강요 할 수있어 이 결과 기대하지 않은 : 나는 문자 목록을 강제 할 수있어 경우, 오히려

> as.character(l) 
[1] "1:3"               
[2] "c(\"a\", \"b\", \"c\")"          
[3] "c(0.874045701464638, 0.0843329173512757, 0.809434881201014)" 

을, 내가 생각했을 좀 더 이런 행동을 볼 것 :

나는 두 가지 질문이

l <- list(a = c(1,2,3), b = letters[1:3], c = runif(3)) 
> as.character(l) 
[1] "c(1, 2, 3)"             
[2] "c(\"a\", \"b\", \"c\")"          
[3] "c(0.344991483259946, 0.0492411875165999, 0.625746068544686)" 

: 나는 원래을 목록 요소를 지정하는 방법 것을 16,가

> as.character(unlist(l)) [1] "1" "2" "3" "a" "b" [6] "c" "0.874045701464638" "0.0843329173512757" "0.809434881201014" 

참고 as.character의 출력에 영향을

  1. 방법 as.character가에서 정보를 준설되어 내 목록 의 원래 창조 1:3c(1,2,3)를 침을 뱉기 위하여.
  2. 정확히 어떤 상황에서이를 수행하고 싶습니까? 목록에 as.character()으로 전화를 걸어이 양식을 출력하고 싶습니다.

답변

7

중요하지 않은 목록의 경우 as.characterdeparse을 사용하여 문자열을 생성합니다.

  1. 벡터가 정수 경우에만

    및 1,2,3, ..., N - 다음은 1:n로 deparses. 1:3 정수 반면

    c(1,2,3)은 ... 더블

  2. 어떤 생각이 :-)

...하지만 당신이 여기 as.character을 이해하려면 deparse보고 :

deparse(c(1L, 2L, 3L)) # 1:3 
deparse(c(3L, 2L, 1L)) # c(3L, 2L, 1L) 
deparse(c(1, 2, 3)) # c(1, 2, 3) 
+1

아하, 'deparse'는 내 첫 번째 질문의 상당 부분을 설명하는 것 같아요. – joran

6

도움말 파일에 표시되는 내용

For lists it deparses the elements individually, except that it extracts the first element of length-one character vectors.

[온라인 상태가 아닌] 약 grep에 대한 답변을 시도한 적이 있습니다. 고려 :

> x <- list(letters[1:10],letters[10:19]) 
> grep("c",x) 
[1] 1 2 

grep 모두 그들에 c(, 두 구성 요소의 일치를 갖고 있기 때문에, 그 결과로, xas.character를 사용합니다. 그 사실을 파악하는 데 시간이 걸렸습니다.

""이 기능을 수행하는 이유는 무엇입니까? ", R 코어 회원 중 한 명이이 작업을 원했을 것 같습니다.

+1

이것이 R이 훌륭한 이유 중 하나입니다. 통계적 프로그래밍을위한 것이며, 독점적으로 함께 일하는 사람들의 좁은 공동체 밖에서 결코 잡으려고하지 않거나 예측할 수없는 행동을 다루기 위해 과도한 양의 에너지를 기꺼이 바치려하지 않습니다. –