为什么R中的这个'sapply'函数会在我的函数中返回无效的响应?

时间:2017-04-29 14:44:19

标签: r

CountNew <- function(x){
     if (x==0) y <- 1
     return(y)
 }
allCF$NewECount >- sapply(allCF$Count, CountNew)

使用上面的代码,如果allCF中的EquipCount中的值当前等于0,我想将其更改为1,同时保持其他值相同,然后保持其余值的值不等于0我通过str(rawCF)命令

确保这些是数字(而非因素)

但后来我收到以下错误:

  

FUN中的错误(X [[i]],...):找不到对象'y'

是什么导致了这个问题?

1 个答案:

答案 0 :(得分:0)

代码逻辑错误。

如果元素不满足x==0怎么办?该函数将返回未定义的y。添加一行就可以解决它:

解决方案1 ​​

allCF <- data.frame(Count=c(0,0,-1))

CountNew <- function(x){
  y=x
  if (x==0) y = 1
  return(y);
  } 


allCF$NewECount  <- sapply(allCF$Count, CountNew)

解决方案2:向量化您的CountNew函数

allCF <- data.frame(Count=c(0,0,-1))

CountNew <- Vectorize(function(x){
  if (x==0) return(1);
  return(x);
  } 
)

allCF$NewECount  <- sapply(allCF$Count, CountNew)

现在你可以直接CountNew(allCF$Count)