Почему я не могу создать фактор из его базового контейнера данных? - PullRequest
1 голос
/ 19 января 2020

Я пытаюсь понять внутреннее представление контейнеров данных в R. Поэтому я попробовал следующее:

Матрица как вектор с атрибутом "dim":

matrix(1:9,nrow=3,ncol=2)

эквивалентно

temp <- 1:6
attr(temp,'dim') <- c(3,2)
temp

DataFrame как список с атрибутами " Имена "," class "и" row.names ":

data.frame(
    integerCol=1:9,
    characterCol=sample(c('safe','risky','unsafe'),9,replace=TRUE),
    logicalCol=sample(c(T,F),9,replace=TRUE)
)

эквивалентен

list(
    integerCol=1:9,
    characterCol=sample(c('safe','risky','unsafe'),9,replace=TRUE),
    logicalCol=sample(c(T,F),9,replace=TRUE)
) -> temp
attr(temp,'class') <- 'data.frame'
attr(temp,'row.names') <- 1:9
temp

Фактор как вектор с атрибутами" level "и" class ":

factor(c('risky','safe','risky','unsafe','safe'))

должно быть эквивалентно следующему:

temp <- c(1,2,1,3,2)
attr(temp,'levels') <- c('risky','safe','unsafe')
attr(temp,'class') <- 'factor'
temp

Но это не удается. Почему я не могу создать фактор здесь?

Также есть ли способ избежать создания временной переменной temp в приведенных выше примерах? т.е. если есть какой-то способ передачи базовых атрибутов структурам данных во время создания, например c(1,2,3,4,5,6, 'dim'=c(3,2))?

1 Ответ

1 голос
/ 19 января 2020

В factor это будет labels

factor(temp, labels = c('risky','safe','unsafe'))
#[1] risky  safe   risky  unsafe safe  
#Levels: risky safe unsafe

Или используйте structure

structure(temp, .Label = c('risky','safe','unsafe'), class = "factor")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...