R script - nchar(x)函数在sapply中不起作用

时间:2016-12-16 22:23:57

标签: rscript

当我尝试将一个sapply功能应用于data.frame时,它不起作用,我收到此错误:

“nchar(x)中的错误:'nchar()'需要一个字符向量”

天才的功能是:

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"))

我不明白为什么我会收到这个错误,因为我已正确编制了我的数据框,如下所示

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

我想要的结果是一个新的data.frame每个元素是旧data.frame中每个元素的字符数。在我的测试data.frame示例中,那将是:

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

1 个答案:

答案 0 :(得分: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进行转置,以确认您所需的输出。