列出函数中的因子列表但返回警告错误

时间:2018-05-25 00:30:18

标签: r function factors

假设我有这些载体:

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 :(得分:1)

解决方案很简单,你只需要围绕“因素”的双括号:)

在功能

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

那应该就行了。

双括号返回一个元素,单括号将该选择作为列表返回。

听起来很傻,试试这个

test <- list()

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

第一个类的类型为'list'。第二个是'NULL'类型。这是因为单个括号返回一个子集作为列表,双括号返回元素本身。根据场景,它很有用。在这种情况下,元素是“NULL”,因为没有为它分配任何内容。

错误“要替换的项目数不是替换长度的倍数”是因为您已经要求它将3个东西放入一个元素(该元素是一个列表)。当你使用双括号时,你实际上把它放在一个列表中,你可以在那里有多个元素,所以它可以工作!

希望有意义!

答案 1 :(得分:0)

目前,当您创建数据框时,数据集$ gender是双向量(如果其中的所有内容都是数字,则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]]

调用