2016-12-16 80 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以确认您的输出。