R:将多个条件应用于向量的函数

时间:2014-07-02 18:34:03

标签: r vector logic

即使有很多关于这个主题的问题,我也没有找到解决问题的有用问题。

我有多个载体:

  

TEST1
      [1] 0.2 0.0

     

TEST2
      [1] 0 0 0 0 0

     

TEST3
      [1] 2 6 9 8 7 4 5 6

     

TEST4
      [1] 0.20 0.30 0.10 0.01 0.02

我写了一个函数来使用以下标准来操纵值:

  • 如果sum(vector)== 0,则打印" down"
  • 如果sum(向量)!= 0,并且长度(向量)> 2且向量> 1,则执行向量* -1
  • 如果sum(向量)!= 0且长度(向量)== 2且向量> 0且向量< 1,则打印NA

我希望:

  

TEST1
      [1] NA

     

TEST2
      [1]" down"

     

TEST3
      [1] -2 -6 -9 -8 -7 -4 -5 -6

     

TEST4
      [1] 5 3.3 10 100 50

我写的函数是:

tets.norm<-function(ratio){
    sum(ratio)->summ
    ifelse(summ!=0, ifelse(length(ratio)>2 & ratio>1, 
            -1*ratio, ifelse(length(ratio)>2 & ratio>0 & ratio<1, 
                           1/ratio, NA)), "down")}

问题是它只返回根据我的标准改变的第一个值。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

tets.norm <- function(x){
  if (sum(x) == 0) { print("down") 
    } else if (sum(x) != 0 & length(x) > 2 & sum(x) > 1) { print(x*-1) 
       } else if (sum(x) != 0 & length(x) > 2 & sum(x) < 1) { print(1/x)
          } else if (sum(x) != 0 & length(x) == 2 & sum(x) > 0 & sum(x) < 1) print(NA)
  }
tets.norm(test1)
## [1] NA
tets.norm(test2)
## [1] "down"
tets.norm(test3)
## [1] -2 -6 -9 -8 -7 -4 -5 -6
tets.norm(test4)
## [1]   5.000000   3.333333  10.000000 100.000000  50.000000