Составление списка факторов в функции, но возвращает предупреждение об ошибке - PullRequest
0 голосов
/ 25 мая 2018

Допустим, у меня есть следующие векторы:

time <- c(306,455,1010,210,883,1022,310,361,218,166)
status <- c(1,1,0,1,1,0,1,1,1,1)
gender <- c(1,1,1,1,1,1,2,2,1,1)

И я превращаю его в эти данные:

dataset <- data.frame(time, status, gender)

Я хочу перечислить факторы в третьем столбце, используя этофункция (p / s: простите за незрелость. Я все еще учусь):

getFactor<-function(dataset){

result <- list()
result["Factors"] <- unique(dataset[[3]])
return(result)

}

И все, что я получаю, это:

getFactor(dataset)
$Factors
[1] 1

Warning message:
In result["Factors"] <- unique(dataset[[3]]) :
number of items to replace is not a multiple of replacement length

Я пытался использовать levels, новсе, что я получаю, это пустой список.Мой вопрос (1), почему это происходит?и (2) есть ли другой способ получить список факторов в функции?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

В настоящее время, когда вы создаете свой фрейм данных, набор данных $ sex представляет собой двойной вектор (что R будет делать автоматически, если все в нем - числа).Если вы хотите, чтобы это было фактором, вы можете объявить это таким образом в начале:

dataset <- data.frame(time, status, gender = as.factor(gender))

Или принудительно сделать это фактором позже:

dataset$gender <-  as.factor(gender)

Затем получить векториз уровней просто, без написания функции:

level_vector <- levels(dataset$gender)
level_vector

Вы также неправильно поднастраиваете списки и фреймы данных в своей функции.Чтобы вызвать третий столбец набора данных, используйте dataset[,3].Первый элемент списка называется list[[1]]

0 голосов
/ 25 мая 2018

Решение простое, вам просто нужны двойные скобки вокруг «Факторов»:)

В функции

result[["Factors"]] <- unique(dataset[[3]])

Это должна быть строка.

Двойнойскобки возвращают элемент, одиночные скобки возвращают этот выбор в виде списка.

Звучит глупо, попробуйте это

test <- list()

class(test["Factors"])
class(test[["Factors"]])

Первый класс будет иметь тип 'список'.Второй будет иметь тип «NULL».Это связано с тем, что одинарные скобки возвращают подмножество в виде списка, а двойные скобки возвращают сам элемент.Это полезно в зависимости от сценария.Элементом в этом случае является «NULL», потому что ему ничего не назначено.

Ошибка «количество заменяемых элементов не кратно длине замены» вызвана тем, что вы попросили положить 3 вещив один элемент (этот элемент является списком).Когда вы используете двойные скобки, вы фактически помещаете его в список, где вы можете иметь несколько элементов, чтобы он мог работать!

Надеюсь, что это имеет смысл!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...