Почему такое поведение при принуждении списка к символу с помощью 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)"

Скорее, если бы мне разрешили преобразовывать списки в символы, я бы подумал, что увижу поведение примерно так:

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

Обратите внимание, что как я указываю элементы списка изначально влияет на вывод as.character :

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)"

У меня два вопроса:

  1. Как as.character углубление вверх информацию из моего первоначального создания списка l , чтобы выплюнуть 1: 3 по сравнению с c (1,2,3) .
  2. При каких именно обстоятельствах я хотел бы это сделать? Когда мне нужно позвонить s.character () в списке и получить вывод этой формы?

9
задан Community 23 May 2017 в 12:19
поделиться