我試圖tolower的是字符類型的數據框我的功能轉換,發現了這個帖子:
tolower
我建立一個函數來進行在幾個數據框架上,最後發現我的所有功能都被當成了角色!sapply和運用給人以is.character()不同的結果
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)
展望#2更好,我發現這第二個職位,通過使用lapply部分地解決了這個問題,但奇怪的建議,以類似的方式申請,並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
雖然申請將考慮所有的功能爲「人物」,lapply或sapply將能夠區分數字和字符的功能。爲什麼這樣?有沒有辦法讓申請找到正確的答案? 謝謝