我不知道这里有什么问题
我猜你的数据中混合了字符串和数字列。要确保您的数据具有正确的类型(
numeric
,character
,..)或某些数字数据已更改为另一种类型并将它们恢复为原始类型,请使用type.convert()
并将scale
应用于你的数据:
library(tidyverse)
trainX_s <- type.convert(trainX, as.is=T)
trainX_s <- mutate_if(trainX_s, is.numeric, scale)
我的猜测:
isnum <- sapply(data, isnum)
trainX_s <- trainX # a copy
trainX_s[isnum] <- data.frame(lapply(trainX[isnum], scale))
scale
函数自我描述为处理 “类矩阵对象”,框架不是这个。上面的 lapply
遍历每一列并独立缩放它们。
如果您已经在使用
dplyr
,那么您可能会做这样的一步操作:
library(dplyr)
trainX_s <- mutate(trainX, across(where(is.numeric), ~ scale(.)))
根据您的数据,您可能需要防止缩放整数,以防它们是离散/有序(或离散/分类),不幸的是
is.numeric(1L)
是真实的,在这种情况下您可能需要
isnum <- sapply(trainX, function(z) is.numeric(z) & !is.integer(z))