2016-12-16 81 views
1

工作時,我試圖將sapply funcion適用於data.frame,它不工作,我得到這個錯誤:[R腳本 - 的nchar(x)函數不sapply

「錯誤的nchar(X ): '的nchar()' 需要的字符向量」

的sapply funcion是:

as.data.frame(sapply(df,function(x) nchar(x))) 

我test.data幀是:

df<-data.frame(valor1=c("R$ 27.144,22"," 30.035,07 "," 30.761,40 "),valor2=c("17.935,85","13.741,63","19.090,80"),valor3=c("0,00","0,00","1")) 

我不明白爲什麼我得到這個錯誤,因爲我propperly格式化我的數據幀如下

df <- as.data.frame(sapply(df,as.character)) 

什麼,我想作爲一個結果將是一個新的data.frame是每個元素的字符數舊數據幀中的每個元素。在我的測試data.frame示例中,那將是:

valor1   valor2  valor3 
[1]12    9    4 
[2]11    9    4 
[3]11    9    1 

回答

0

那麼答案就在於錯誤警告。 nchar需要一個字符向量,其中sapply這裏不提供(調試時,sapply的輸出是「因素」而不是「字符」)。你必須使用apply代替:

ncharsap <- function() { 
    df1 <-data.frame(valor1=c("R$ 27.144,22"," 30.035,07 "," 30.761,40 "),valor2=c("17.935,85","13.741,63","19.090,80"),valor3=c("0,00","0,00","1")) 
    df1 <- as.data.frame(sapply(df1,as.character)) 
    df2 <- t(as.data.frame(apply(df1,1, function(x) nchar(x)))) 
    return(df2) 
} 

注:這是不好的做法是使用內置函數的名稱命名自定義對象。所以我將df更改爲df1。並且輸出需要轉置t以確認您的輸出。