我有以下功能:
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.
答案 0 :(得分:1)
apply(df, MARGIN=c(1,2), FUN=expToLevel)