簡體   English   中英

R:對向量應用多個條件的函數

[英]R: function applying multiple condition to a vector

即使關於此主題有很多問題,我也沒有設法為我的問題找到有用的問題。

我有多個向量:

測試1
[1] 0.2 0.0

測試2
[1] 0 0 0 0 0

測試3
[1] 2 6 9 8 7 4 5 6

測試4
[1] 0.20 0.30 0.10 0.01 0.02

我編寫了一個使用以下條件操縱值的函數:

  • 如果sum(vector)== 0,則打印“向下”
  • 如果sum(vector)!= 0,並且length(vector)> 2和vector> 1,則執行vector * -1
  • 如果sum(vector)!= 0和length(vector)== 2且vector> 0和vector <1,則打印NA

我期望:

測試1
[1]不適用

測試2
[1]“下”

測試3
[1] -2 -6 -9 -8 -7 -4 -5 -6

測試4
[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")}

問題在於,它僅向我返回根據我的條件更改的第一個值。

有什么建議嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM