2013-05-26 35 views
2

假設其中有一堆從pnorm()返回的數據,因此您的數字介於.0003ish和.9999ish之間。R,四捨五入,天花板和地板

numbers  <- round(rnorm(n = 10000, mean = 100, sd = 15)) 
percentiles <- pnorm(numbers, mean = 100, sd = 15)*100 

然後進一步假設一個有興趣四捨五入百分使得0.0003或whatevs會出來爲1(所以天花板()),但99.999會出來至99(因此地板()) 。

我想我正在尋找的是round(),它以某種方式出色地知道在極端情況下將其逆轉,但據我所知,不存在這樣的事情。我會不得不用一個if語句來醜陋呢?有沒有更好的方法來處理這樣的事情?

回答

3

你可以使用round和力事成199在使用pminpmax四肢:

pmax(1, pmin(99, round(percentiles))) 
+0

這是一個很好的解決方案。 在這種情況下,最好是事先使用pmax()和pmin()嗎?很難說它是否重要。 (1,pmin(99,round(percentiles)))' 'test2 < - round(pmax(1,pmin(99,percentiles)))' 'all.equal(test1,test2 )' 似乎暗示至少在這種情況下它是一樣的。我的意思是,如果我甚至做對了! –

+0

這並不重要,因爲這三個函數中的每一個都在全矢量上運行。如果'pmax'和'pmin'函數在處理'integer'時比'numeric'更快,那麼可能有什麼不同之處就像'pmax(1L,pmin(99L,as.numeric(round(percentiles))))' 「但正如我所測試的,似乎並非如此。 – flodel

+0

這是完全意義上的。謝謝! :d –