2016-01-05 27 views
1

我希望這個問題是新的,因爲我找不到適用於我的解決方案。R中的3段轉換函數

我有一個向量x,可以填充任何實數。在該向量中的元素應通過函數按照以下方式被轉換:

X = 0,如果x <一個

X =(XA)/(BA)中,如果< = X < = B

X = 1,如果x> b

這是我想出了功能:

transf <- function(x, a = 0, b = 1){ 
    if(a > b) stop("\nThe lower bound must be smaller than the upper bound!") 

    if(x < a){ 
    y = 0 
    } 
    else if(a <= x <= b){ 
    y = (x-a)/(b-a) 
    } 
    else{ 
    y = 1 
    } 
    return(y) 
    print(y) 
} 

我得到一束的錯誤消息噸我不能把它放在一起。我也嘗試更換其他如果和其他簡單的如果,但也沒有工作。

如何解決這個任何幫助將是非常讚賞

+0

請考慮添加一個'x'的例子。 –

+0

也許'ifelse'語句? – Marta

回答

1

我會用邏輯索引:

i.low <- x < a 
i.mid <- x >= a & x <= b 
i.high <- x > b 
x[i.low] <- 0 
x[i.mid] <- (x[i.mid] - a)/(b - a) 
x[i.high] <- 1 

你原來的職位並沒有說什麼錯誤是,但我猜測你是通過向量作爲你的函數參數,錯誤是抱怨「條件長度> 1,只有第一個元素將被使用」。這是因爲你正在測試邏輯向量的條件。

+0

工程很好(可能更快)!謝謝 :) – cholz