2013-07-25 44 views
3

我有載體的這個列表:如何從矢量列表中刪除異常值?

tdatm.sp=structure(list(X3CO = c(24.88993835, 25.02366257, 24.90308762 
), X3CS = c(25.70629883, 25.26747704, 25.1953907), X3CD = c(26.95723343, 
26.84725571, 26.2314415), X3CSD = c(36.95250702, 36.040905, 36.90475845 
), X5CO = c(25.44123077, 24.97585869, 24.86075592), X5CS = c(25.71570396, 
26.10244179, 25.39032555), X5CD = c(27.67508507, 27.18985558, 
26.93682098), X5CSD = c(36.26528549, 34.88553238, 33.97910309 
), X7CO = c(24.7142601, 24.08443642, 23.97057915), X7CS = c(24.55734444, 
24.56562042, 24.7589817), X7CD = c(27.14260101, 26.65704346, 
26.49533081), X7CSD = c(33.89881897, 32.91091919, 32.79199219 
), X9CO = c(26.86141014, 26.42648888, 25.8350563), X9CS = c(28.17367744, 
27.27400589, 26.58813667), X9CD = c(28.88915062, 28.32597542, 
28.2713623), X9CSD = c(34.61352158, 35.84189987, 35.80329132)), .Names = c("X3CO", 
"X3CS", "X3CD", "X3CSD", "X5CO", "X5CS", "X5CD", "X5CSD", "X7CO", 
"X7CS", "X7CD", "X7CSD", "X9CO", "X9CS", "X9CD", "X9CSD")) 

> head(tdatm.sp) 
$X3CO 
[1] 24.88994 25.02366 24.90309 

$X3CS 
[1] 25.70630 25.26748 25.19539 

$X3CD 
[1] 26.95723 26.84726 26.23144 

$X3CSD 
[1] 36.95251 36.04091 36.90476 

$X5CO 
[1] 25.44123 24.97586 24.86076 

$X5CS 
[1] 25.71570 26.10244 25.39033 

我想從使用Hampel的方法每個單獨的矢量去除異常值。我發現這樣做

一種方法是:

repoutliers=function(x){ med=median(x); mad=mad(x); x[x>med+3*mad | x<med-3*mad]=NA; return(x)} 
lapply(tdatm.sp, repoutliers) 

但我想知道是否有可能做到這一點不宣新的功能,直接在lapply。 lapply將每個單獨的向量發送給函數repoutliers,你知道如何在lapply中直接操作這個單獨的向量嗎?假設我用函數「replace」替換repoutliers,我可以通過調用replace(lapply(X,FUN,...); ... =替換參數)參數中的單獨向量來做同樣的單詞。

簡而言之:如何操作個別向量lapply發送給函數winthin lapply?

+0

爲什麼你想不做一個新的功能呢? – PAC

+0

我以爲我們可以直接調用傳遞的變量,而不使用新的函數,我認爲這對未來我會有用,但似乎是不可能的。 – Wicelo

回答

2

這真的是或多或少的番茄tomahtoe的東西。在樂器上做這一切並沒有讓你走得很遠。

lapply(tdatm.sp, function(x){ 
    med=median(x) 
    mad=mad(x) 
    x[x>med+3*mad | x<med-3*mad]=NA 
    return(x)}) 

現在lapply只是發送一切匿名函數。但是如果你不希望這個函數在後來懸而未決,那麼這個方法是很方便的。

+0

哦好吧我看到所以沒有可調用變量直接訪問個別向量,而不通過函數 – Wicelo