zoukankan      html  css  js  c++  java
  • 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
    

      

      

  • 相关阅读:
    Failed to convert WOFF 2.0 font to SFNT 字体图标显示不出来
    每日一字:困
    每日一字:biáng
    sqlserver数据类型简记
    每日一字:天
    可以作为今生目标的一句话
    每日一字:惑
    [转载]优秀程序员的12中能力
    每日一字:怒
    [转载]像树一样活着
  • 原文地址:https://www.cnblogs.com/lmj-sky/p/11138950.html
Copyright © 2011-2022 走看看