我正在寻找适用于R语言的%%运算符的方法。
10 %% 10 # 0
20 %% 10 # 0
怀疑这两个结果:
10 %% 20 # 10
2 %% 8 # 2
你能帮助我更好地理解最后两个结果吗?我有点困惑。
答案 0 :(得分:10)
没错:
10 = 1 * 10 + 0
20 = 2 * 10 + 0
10 = 0 * 20 + 10
2 = 0 * 8 + 2
模数是+
之后的数字。
一般来说,对于两个数字a
和b
,有
a = floor(a / b) * b + (a %% b)
让我们写一个玩具功能:
foo <- function(a,b) c(quotient = floor(a / b), modulo = a %% b)
foo(10, 10)
#quotient modulo
# 1 0
foo(20, 10)
#quotient modulo
# 2 0
foo(10, 20)
#quotient modulo
# 0 10
foo(2, 8)
#quotient modulo
# 0 2
更新:我们也可以使用floor(a / b)
而不是a %/% b
来获取商数。
答案 1 :(得分:1)
我也很困惑,但如果你明白 %% 运算符的结果是除法的余数,那就很容易了。
例如。 75%%4 = 3
并且我注意到如果 dividend 小于 divisor,那么 R 返回相同的 dividend 值。
例如。 4%%75 = 4
10%% 20 = 10 2%% 8 = 2
干杯
答案 2 :(得分:1)
我会提供另一种解释。解决这个问题:
20 %% 10 = 0
不要评估模数,而是从简单的除法开始:
20 / 10 = 2
如您所知,答案“2”意味着需要两组 10 才能得到 20。请注意,我们也可以将答案写成小数点 2.0。
小数点很重要。当小数为 .0 时,我们没有余数。我们有全套。如果除法产生 0 小数,则模计算为零。
现在考虑:
11/3 = 3.667
尾部 0.667 是一组 3 中剩余的部分在我们形成所有完整的 3 组之后。在小数点的左边,我们显示:
#Splitting the answer into its components - 3 full sets, 0.667 partial sets
3.0 + 0.667 = 3.667
所以如果我们想知道实际剩余数量,我们可以将 0.667 乘以除数,3:
0.667 * 3 = 2
这是剩下的。它是在所有完整的 3 组形成后剩余的数量。这与我们使用模得到的结果相同:
11 %% 3 = 2
这里同样适用。鉴于这个问题,
10 %% 20 = 10
我们可以正常除以得到:
10 / 20 = 0.5
读到这里,我们有 0 个完整的 20 组(左侧);我们只有半组,0.5,20。
0.5 * 20 = 10
这相当于:
10 %% 20 = 10
10 因此是余数。这是我们拥有的 10 个与达到 20 个所需的 10 个之间的差距。
答案 3 :(得分:0)
尝试用x modulo来理解R中的一些结果我找到了这个页面。然后试着向自己解释一些&#34; querky&#34;结果我在下面写了这个R脚本。我已经读过模数运算符的余数或结果应该总是正数,但在R中不是这种情况,这里提供的定义和示例解释了似乎使用的逻辑。定义&#34; x mod y = x - (| x / y | * y)&#34;其中| x / y | = floor(x / y)似乎在R中始终为真,或者以更标准的方式,余数的定义&#34; r&#34;操作q = x / y是x = k q + r,其中k和r都是整数。 我的脚本的评论是用法语发表的,所以我删除了它们,但是没有必要理解...... 基本上在R中,x = 2且y = -5,x mod y = -3;或者使用定义x = k q + r我们有r = x - k q = -3。 尽管如此,这在数学意义上是一种颤抖,因为&#34;整数部分产品&#34; (k q)实际上超过了被除数(x),因此将余数(r)定义为负整数......
x < - 2
y&lt; - -5
q&lt; - x / y
k&lt; - floor(2 / -5)
kq&lt; - floor(2 / -5)* -5
r&lt; - 2 - (floor(2 / -5)* -5)
x %% y
答案 4 :(得分:0)
remainder <- dividend %% divisor
documentations中唯一缺少的是细节,哪一边是股息,哪一边是除数。 Wikipedia将两个术语描述为:
被除数称为除数,除数除以除数,结果称为商。在此示例中,红利为20,除数为5,商为4。
但是,与除法运算相比,取模运算不返回商。而是返回余数。
要轻松理解模运算,最好是股息> 除数。
12 %% 11
# quotient is 1.090909
# remainder is 1
12 %% 10
# quotient is 1.2
# remainder is 2
12 %% 9
# quotient is 1.333333
# remainder is 3
12 %% 8
# quotient is 1.5
# remainder is 4
12 %% 7
# quotient is 1.714286
# remainder is 5
12 %% 6
# quotient is 2
# remainder is 0
# 12 is divisible by 6
12 %% 5
# quotient is 2.4
# remainder is 2
12 %% 4
# quotient is 3
# remainder is 0
# 12 is divisible by 4
12 %% 3
# quotient is 4
# remainder is 0
# 12 is divisible by 3
12 %% 2
# quotient is 6
# remainder is 0
# 12 is divisible by 2
12 %% 1
# quotient is 12
# remainder is 0
# any whole number is divisible by 1