列出函数中的因素但 return 警告错误

Making list of factors in a function but return warning error

假设我有这些向量:

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) 有没有其他方法可以获得函数中的因子列表?

解决方法很简单,只需要在 "Factors" 周围加双括号 :)

函数中

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

应该是这条线。

双括号return一个元素,单括号return表示选择一个列表。

听起来很傻,试试这个

test <- list()

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

第一个 class 类型为 'list'。第二个将是 'NULL' 类型。这是因为单括号 return 是作为列表的子集,而双括号 return 是元素本身。根据场景,它很有用。本例中的元素是 "NULL",因为尚未为其分配任何内容。

错误 "number of items to replace is not a multiple of replacement length" 是因为您要求它将 3 个东西放入单个元素(该元素是一个列表)。当你使用双括号时,你实际上把它放在一个列表中,你可以在列表中有多个元素,所以它可以工作!

希望这是有道理的!

目前,当您创建数据框时,dataset$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]]

调用