【发布时间】:2017-07-16 23:36:44
【问题描述】:
我试图将我的数据框的特征转换为字符类型并发现这篇文章:
tolower
我在几个 data.frames 上构建了一个函数,最后发现我的所有特征都被视为字符!
mytolower <- function(p_vector){
if (is.character(p_vector)) return(tolower(iconv(enc2utf8(p_vector), sub = "byte")))
else return(p_vector)
}
for (df in c("train", "test")) as.data.frame(apply(get(df), 2, function(x) mytolower(x)), stringsAsFactors = FALSE)
在 Stackoverflow 上看起来更好,我发现这篇第二篇文章通过使用 lapply 部分解决了这个问题,但奇怪的是,这表明 apply 和 sapply 以类似的方式工作
lapply rather than apply
因此,我终于建立了这个基本上说明我的麻烦的例子:
train <- data.frame(v1=1:3, v2=c("a","b","c"), v3=11:13, stringsAsFactors = FALSE)
str(train)
apply(train, 2, function(x) is.character(x)) #wrong
lapply(train, function(x) is.character(x)) #right
sapply(train, function(x) is.character(x)) #right
sapply(train, is.character) #right
虽然 apply 会将所有特征视为“字符”,但 lapply 或 sapply 将能够区分数字和字符特征。为什么会这样?有没有办法让 apply 找到正确的答案? 谢谢
【问题讨论】: