如何一次性将H2OFrame对象的多列转换为因子类型?
解决H2OFrame批量转换多列为因子类型的问题
我懂你遇到的麻烦了——用处理普通data.frame的套路来转H2OFrame的列类型确实行不通,毕竟H2OFrame是存在H2O集群里的分布式对象,不能直接套用base R的factor()和lapply逻辑操作。
正确的批量转换方法
直接用H2O官方提供的h2o.asfactor()函数就行,它支持一次性指定多列转换,完美适配H2OFrame:
# 生成示例数据 data <- data.frame(matrix(sample(1:40), 4, 10, dimnames = list(1:4, LETTERS[1:10]))) data.hex <- as.h2o(data, destination_frame = "data.hex") cols <- c("A", "C", "D", "H") # 批量将指定列转为因子类型 data.hex <- h2o.asfactor(data.hex, columns = cols)
要是你更习惯逐个处理列的方式,循环写法也能实现:
for(col in cols) { data.hex[[col]] <- h2o.asfactor(data.hex[[col]]) }
原方法报错的原因
你之前写的data.hex[cols] <- lapply(data.hex[cols], factor)有两个核心问题:
factor()是base R的本地函数,它会把H2OFrame的列转换成本地R环境里的因子向量,不是H2O集群支持的分布式因子类型。- 把本地生成的向量赋值回H2OFrame,会导致本地对象和集群对象类型不匹配,自然就触发报错了。
验证转换结果
可以用下面的代码确认列类型是否转换成功:
# 查看所有列的类型 h2o.types(data.hex)
内容的提问来源于stack exchange,提问作者David Leal
相关产品推荐
相关产品推荐

