编写一个能够传递给lapply的函数

时间:2015-09-07 23:21:51

标签: r lapply

我有以下功能:

expToLevel <- function(exp) {
    if(is.character(exp)) {
        return(exp)
    }
    for(i in 1:length(expTable)) {
        if(i+1 == 100) {
            return(99)
        }
        optr <- i + 1

        ntf = expTable[i]
        nto = expTable[optr]

        if(exp >= ntf & exp < nto) {
            return(i)
        }
    }

    return(0)
}

基本上,它应该采用给定的数字,遍历列表,并找到正确的值。这个功能本身运作正常,我现在还没有提速。问题是,当我运行as.data.frame(lapply(myObj, FUN=expToLevel))时,我得到50个错误,所有人都说:

1: In if (exp >= ntf & exp < nto) { ... : the condition has length > 1 and only the first element will be used

任何想法?

我有这种结构的数据框:

> str(sc)
'data.frame':   5775 obs. of  25 variables:
 $ V1 : chr  "name1" "name2" "name3" "name4" ...
 $ V2 : num  617033491 1516909947 318531089 1881682119 764821383 ...
 $ V3 : num  13693391 13778068 3287842 48014739 54528460 ...
 $ V4 : num  13692714 13775391 3290310 48014766 21078118 ...
 $ V5 : num  13925555 23335843 4500664 49423442 26513175 ...

我想在这个数据框上提供我的函数,并从expTable中获取相应的值。 expTable是一个包含99个元素的列表,根据输入,它将返回1到99之间的数字。但是,如果输入大于或等于13034431,则默认情况下应返回99.

1 个答案:

答案 0 :(得分:1)

apply(df, MARGIN=c(1,2), FUN=expToLevel)