หากคุณต้องการปัดเศษขึ้นเป็นกำลัง 10 ที่ใกล้ที่สุดให้กำหนด:
roundUp <- function(x) 10^ceiling(log10(x))
สิ่งนี้ใช้ได้จริงเมื่อ x เป็นเวกเตอร์:
> roundUp(c(0.0023, 3.99, 10, 1003))
[1] 1e-02 1e+01 1e+01 1e+04
.. แต่ถ้าคุณต้องการปัดเศษเป็นตัวเลข "nice" ก่อนอื่นคุณต้องกำหนดว่าตัวเลข "nice" คืออะไร ต่อไปนี้ช่วยให้เราสามารถกำหนด "nice" เป็นเวกเตอร์ที่มีค่าฐานที่ดีตั้งแต่ 1 ถึง 10 ค่าเริ่มต้นจะตั้งเป็นเลขคู่บวก 5
roundUpNice <- function(x, nice=c(1,2,4,5,6,8,10)) {
if(length(x) != 1) stop("'x' must be of length 1")
10^floor(log10(x)) * nice[[which(x <= 10^floor(log10(x)) * nice)[[1]]]]
}
ข้างต้นใช้ไม่ได้เมื่อ x เป็นเวกเตอร์ - ตอนนี้สายเกินไปในตอนเย็น :)
> roundUpNice(0.0322)
[1] 0.04
> roundUpNice(3.22)
[1] 4
> roundUpNice(32.2)
[1] 40
> roundUpNice(42.2)
[1] 50
> roundUpNice(422.2)
[1] 500
[[แก้ไข]]
หากคำถามคือวิธีปัดเศษให้เป็นค่าที่ใกล้เคียงที่สุดที่ระบุไว้ (เช่น 10 หรือ 100) คำตอบของเจมส์จะเหมาะสมที่สุด เวอร์ชันของฉันช่วยให้คุณใช้ค่าใดก็ได้และปัดเศษให้เป็นค่าที่ "ดี" โดยอัตโนมัติ ตัวเลือกที่ดีอื่น ๆ ของเวกเตอร์ "nice" ด้านบน ได้แก่ :1:10, c(1,5,10), seq(1, 10, 0.1)
ตัวอย่างเช่นหากคุณมีช่วงของค่าในพล็อตของคุณ[3996.225, 40001.893]
วิธีอัตโนมัติควรพิจารณาทั้งขนาดของช่วงและขนาดของตัวเลข และเป็นที่สังเกตจากฮัดลีย์ที่pretty()
ฟังก์ชั่นอาจจะมีสิ่งที่คุณต้องการ