如何将一个数转换为R中另一个数的第一个可除数

如何将一个数转换为R中另一个数的第一个可除数,r,integer,division,R,Integer,Division,我想将任何数字除以6,仍然有一个整数。那么,我怎样才能使R将一个数字转换成最接近的可除数呢 例如,在这种情况下,应将607转换为606。这里有三种方法 foo_Gregor = function(N, n){ return(round(N / n) * n) } foo_HubertL = function(N, n){ return(n*((N+n/2) %/% n)) } foo_db = function(N, n){ t1 = N %% n if (t

我想将任何数字除以
6
,仍然有一个整数。那么,我怎样才能使
R
将一个数字转换成最接近的可除数呢


例如,在这种情况下,应将
607
转换为
606

这里有三种方法

foo_Gregor = function(N, n){
    return(round(N / n) * n)
}

foo_HubertL = function(N, n){
    return(n*((N+n/2) %/% n))
}

foo_db = function(N, n){
    t1 = N %% n
    if (t1 < n/2){
        return(N - t1)
    } else {
        return(N + n - t1)
    }
}    

var_db = sapply(1:10000, function(i) foo_db(N = i, n = 6))
var_Gregor = sapply(1:10000, function(i) foo_db(N = i, n = 6))
var_HubertL = sapply(1:10000, function(i) foo_db(N = i, n = 6))

identical(var_db, var_Gregor)
#[1] TRUE
identical(var_HubertL, var_Gregor)
#[1] TRUE
foo_Gregor=函数(N,N){
返回(轮(N/N)*N)
}
foo_HubertL=函数(N,N){
回报率(n*((n+n/2)%/%n))
}
foo_db=函数(N,N){
t1=N%%N
如果(t1

foo_Gregor
可能是最好的,因为它简单,并且能够用
floor
floor

修改它。最近的是606。
round(x/6)*6
。用
地板
天花板
替换
圆形
,使其始终上升或下降。
6*(607%/%6)
@HubertL这是使用
地板
的一种(可能更有效)方法。。。将始终向下,而不是最近的。
6*((609+6/2)%/%6)