Почему «логический» аргумент возвращает разные выходные данные для векторов и столбцов - PullRequest
0 голосов
/ 06 апреля 2020

Может кто-нибудь сказать мне, почему «логический» аргумент возвращает разные выходные данные для векторов и столбцов:

 a<-c(1,0,"t")
 the_numeric<-vector("logical",length(a))
 for (i in seq_along(a)) the_numeric[[i]] <- is.numeric(a[[i]])
 the_numeric
[1] FALSE FALSE FALSE

 df<-tibble::tibble(
     a=rnorm(10),
     b=rnorm(10),
     c=sample(letters,10)
     )
 the_numeric<-vector("logical",length(df))
 for (i in seq_along(df)) the_numeric[[i]] <- is.numeric(df[[i]])
 the_numeric
[1]  TRUE  TRUE FALSE

1 Ответ

1 голос
/ 06 апреля 2020

Разница не между векторами против тибблов, а между векторами и списками (тиббл / фреймы данных - особый вид списка).

Векторы могут содержать данные только одного класса. Следовательно, все значения a становятся символами, что является наиболее распространенным классом, но это не относится к фреймам данных / таблицам, где они могут хранить данные разных классов в разных столбцах.

a<- c(1,0,"t")
a
#[1] "1" "0" "t"

class(a)
#[1] "character"

sapply(df, class)
#          a           b           c 
#  "numeric"   "numeric" "character" 
...