双百分号符号(%%)是什么意思?

26

在R语言中,双百分号 (%%) 用于什么目的?

从使用效果来看,它貌似会将前面的数字除以后面的数字尽可能多的次数,并返回余数。这样理解正确吗?

出于好奇,这种操作在什么情况下会有用?

3个回答

51
“算术运算符”帮助页面(可以通过?"%%"访问)中说:

%%’表示‘x mod y’

只有当您已经进行了足够的编程,知道这是指模运算,即整数除以y并返回余数时,才会有所帮助。这在许多应用程序中非常有用。例如(来自@GavinSimpson的评论),如果您正在运行循环并希望每隔n次迭代向屏幕打印某种进度指示器,则%%很有用(例如使用if (i %% 10 == 0) { #do something}来执行每第10次迭代的操作)。
由于%%在R中也适用于浮点数,因此我找到了一个例子,其中使用if (any(wts %% 1 != 0))来测试任何wts值是否为非整数。

非常感谢您的回复。我看了一下“%%”,但不理解“x mod y”的含义。 - pheeper
4
如果答案解决了您的问题,鼓励您点击勾选标记以接受它…此外,为了将来的参考,最好在您的问题中说明您已经尝试过什么(例如,“我查看了`?”** ',我看到它说' x mod y ',但我不知道那是什么意思"),这样人们就可以给您最有用的答案。 - Ben Bolker
1
@GavinSimpson,你不需要在那行代码中加上感叹号,你需要加上另一个等号。也就是说,每隔10次迭代,余数(10/10或20/10的余数)应该为0。 - dez93_2000
1
@dez93_2000 是的,这是一个愚蠢的打字错误,Ben和我都忽略了。 - Gavin Simpson
1
%% 运算符不是交换律(即 a %% b != b %% a)。360 %% 90 是 0(360/90 的余数为 0);90 %% 360 是 90(90/360 的余数为 90)。 -90 %% 360 解释起来有点棘手,但 a %% b 的结果始终在 0(包括)和 b(不包括)之间。 (如果这有帮助的话,取模有时被称为“时钟算术”...) - Ben Bolker
显示剩余7条评论

11

%% 操作符的结果是除法的余数,

例如,75%%4 = 3

我注意到如果 被除数 小于 除数,那么 R 返回相同的 被除数 值。

例如,4%%75 = 4

祝福您

division parts


2
在R中,%%返回余数,例如:
s=c(1,8,10,4,6)
d=c(3,5,8,9,2)
x=s%%d
x
[1] 1 3 2 4 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接