किसी भी अंतराल के ऊपर / नीचे किसी भी संख्या को गोल करें
आप मॉडुलो ऑपरेटर का उपयोग करके आसानी से एक विशिष्ट अंतराल पर संख्याओं को गोल कर सकते हैं %%
।
कार्यक्रम:
round.choose <- function(x, roundTo, dir = 1) {
if(dir == 1) { ##ROUND UP
x + (roundTo - x %% roundTo)
} else {
if(dir == 0) { ##ROUND DOWN
x - (x %% roundTo)
}
}
}
उदाहरण:
> round.choose(17,5,1) #round 17 UP to the next 5th
[1] 20
> round.choose(17,5,0) #round 17 DOWN to the next 5th
[1] 15
> round.choose(17,2,1) #round 17 UP to the next even number
[1] 18
> round.choose(17,2,0) #round 17 DOWN to the next even number
[1] 16
यह काम किस प्रकार करता है:
मॉडुलो ऑपरेटर %%
2 द्वारा पहली संख्या को विभाजित करने के शेष को निर्धारित करता है। इस अंतराल को आपकी रुचि की संख्या में जोड़ना या घटाना अनिवार्य रूप से आपके चयन के अंतराल पर संख्या को 'गोल' कर सकता है।
> 7 + (5 - 7 %% 5) #round UP to the nearest 5
[1] 10
> 7 + (10 - 7 %% 10) #round UP to the nearest 10
[1] 10
> 7 + (2 - 7 %% 2) #round UP to the nearest even number
[1] 8
> 7 + (100 - 7 %% 100) #round UP to the nearest 100
[1] 100
> 7 + (4 - 7 %% 4) #round UP to the nearest interval of 4
[1] 8
> 7 + (4.5 - 7 %% 4.5) #round UP to the nearest interval of 4.5
[1] 9
> 7 - (7 %% 5) #round DOWN to the nearest 5
[1] 5
> 7 - (7 %% 10) #round DOWN to the nearest 10
[1] 0
> 7 - (7 %% 2) #round DOWN to the nearest even number
[1] 6
अपडेट करें:
सुविधाजनक 2-तर्क संस्करण:
rounder <- function(x,y) {
if(y >= 0) { x + (y - x %% y)}
else { x - (x %% abs(y))}
}
सकारात्मक y
मूल्य roundUp
, जबकि नकारात्मक y
मूल्य roundDown
:
# rounder(7, -4.5) = 4.5, while rounder(7, 4.5) = 9.
या फिर ....
मानक राउंडिंग नियमों के आधार पर स्वचालित रूप से UP या DOWN के लिए फ़ंक्शन
Round <- function(x,y) {
if((y - x %% y) <= x %% y) { x + (y - x %% y)}
else { x - (x %% y)}
}
यदि राउंडिंग मान के बाद के उदाहरणों के बीच x
मान >
आधा है , तो स्वचालित रूप से गोल हो जाता है y
:
# Round(1.3,1) = 1 while Round(1.6,1) = 2
# Round(1.024,0.05) = 1 while Round(1.03,0.05) = 1.05