2013-06-11 19 views
2

有誰知道一個通​​用的R函數來映射範圍之間的數據嗎?我找不到任何東西,但這似乎是一個非常重要的基本功能。例如正常化數據範圍之間的數據/映射

map = function(x, xmin=NULL, xmax=NULL, tmin=0, tmax=1, na.rm=FALSE){ 
    if(is.null(xmin)) xmin = min(x) 
    if(is.null(xmax)) xmax = max(x) 
    x.range = xmax - xmin 
    t.range = tmax - tmin 
    ((x - xmin)/x.range * t.range + tmin) 
} 

..將默認情況下從輸入數據範圍標準化爲[0,1],但也可以使用自定義輸入範圍或映射到特定的輸出:

> v = -5:5 
> map(v) 
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 
> map(v, xmin=-10, xmax=10) 
[1] 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 
> map(v, tmax = 500) 
[1] 0 50 100 150 200 250 300 350 400 450 500 

我是否重新發明輪子?

+1

當然你不想來命名函數'map'? –

回答

3

鱗片包有一個:

scales::rescale(v) 
scales::rescale(v, from=c(-10, 10)) 
+0

感謝@baptiste避免了我的搜索 - 如果將'normalize'添加到某個地方的包中,可能會有所幫助,所以它會顯示'?? normalise'搜索。這屬於我認爲的基礎軟件包。 – geotheory

+2

那麼,由於它不是'標準化的',即轉換到'base :: scale'所做的「標準正常」,你可能難以銷售這種變化。我想知道r-meisters是否只寫了一個小的輔助函數:'constrain01 < - function(x)(x-min(x))/ diff(range(x))' –