R 语言使用sapply , lapply 中 遇到问题 the condition has length > 1 and only the first element will be used


使用 lapply 中输入list , 如果自己编写的函数中存在 if 判断语句,会导致有时候会报错,举例子如下:

> rm(list=ls())
> Test <- function(x){
+   if(x == 1){
+     y = x+1
+   }else{
+     y = x+2
+   }
+ }
> 
> Data1 = list(c(1,2,3))
> lapply(Data1,Test)
[[1]]
[1] 2 3 4

Warning message:
In if (x == 1) { :
  the condition has length > 1 and only the first element will be used
> 
> # 解决方法1
> Data2 = list(c(1,2,3))
> lapply(Data2[[1]],Test)
[[1]]
[1] 2

[[2]]
[1] 4

[[3]]
[1] 5

> 
> 
> # 解决方法2
> Data3 = c(1,2,3)
> lapply(Data3,Test)
[[1]]
[1] 2

[[2]]
[1] 4

[[3]]
[1] 5

> 
> 
> # 解决方法3,使用 ifelse 函数,这个就要修改原始的函数了
> Test2 <- function(x){
+   y = ifelse(x==1,x+1,x+2)
+ }
> lapply(Data1,Test2)
[[1]]
[1] 2 4 5

> 
> # 如果ifelse 的语句有多个输出结果可以使用 list 函数进行连接
> Test3 <- function(x){
+   y <- ifelse(x==1,list(c(x+1,x+2,x+3)),0)
+ }
> lapply(Data1[[1]],Test3)
[[1]]
[[1]][[1]]
[1] 2 3 4


[[2]]
[1] 0

[[3]]
[1] 0

  

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM