2015-12-22 29 views
2

替換值我試圖創建一個函數的變量替換離羣值:自定義功能中的R

outlier_upper_replace <- function(x, level=1.5) { 
    lowerq = quantile(x, na.rm=TRUE)[2] 
    upperq = quantile(x, na.rm=TRUE)[4] 
    iqr = upperq - lowerq 
    outlier_upper = (iqr * level) + upperq 
    x[x > outlier_upper] <- outlier_upper 
} 

我不明白爲什麼outlier_upper_replace(prod$varname)沒有替代的價值。

如果我運行下面的代碼,這是上述功能的特定情況下,該值被替換:

level = 1.5 
lowerq = quantile(prod$varname, na.rm=TRUE)[2] 
upperq = quantile(prod$varname, na.rm=TRUE)[4] 
iqr = upperq - lowerq 
outlier_upper = (iqr * level) + upperq 
prod$varname[prod$varname > outlier_upper] <- outlier_upper 

爲什麼發生這種情況任何見解?

編輯:實例

set.seed(1) 
x <- rnorm(100) 
x <- c(-10, x, 10) 

boxplot(x, main="start boxplot") 

#function to bin-in upper outliers 
outlier_upper_replace <- function(x, level=1.5) { 
    lowerq = quantile(x, na.rm=TRUE)[2] 
    upperq = quantile(x, na.rm=TRUE)[4] 
    iqr = upperq - lowerq 
    outlier_upper = (iqr * level) + upperq 
    x[x > outlier_upper] <- outlier_upper 
    return(x) 
} 

outlier_upper_replace(x) 

boxplot(x, main="end boxplot") 
+0

你能舉一個你運行失敗的例子嗎?在我看來,你給的代碼應該工作。 – Badger

+0

謝謝我將提供一個代碼示例 – myst999

回答

2

添加

return(x) 

你的函數結束。

R函數的返回值是函數體中最後一個表達式的結果。由於您修改了最後一個表達式中的向量,因此沒有結果,您必須顯式返回結果。

+0

謝謝,我試過了,但無濟於事。 – myst999

+0

@ myst999,你似乎不明白函數是如何工作的。運行函數時,需要重新分配輸出或將其分配給另一個對象。嘗試'y < - outlier_upper_replace(x); boxplot(y)'或'boxplot(outlier_upper_replace(x))'如果你不想創建另一個對象。 – A5C1D2H2I1M1N2O1R2T1