2015-10-02 38 views
0

我刚刚开始了我在R中编程的冒险。我需要使用'%%'运算符创建一个程序求和数字,3和5可以在1到1000的范围内整除。我想出了一个想法,创建两个矩阵,其中一列中的数字为1至1000,剩余部分保留在第二列中。但是,我不知道如何总结适当的元素(Excel中的“sum if”函数的种类)。我重视我在下面所做的一切。在此先感谢您的帮助!R条件求和

s1<-1:1000 
in<-s1%%3 
m1<-matrix(c(s1,in), 1000, 2, byrow=FALSE) 

s2<-1:1000 
in2<-s2%%5 
m2<-matrix(c(s2,in2),1000,2,byrow=FALSE) 
+1

'in'是R中的保留字,您将无法使用它作为一个变量名 –

+0

一种方式有条件地概括就是'sum'矢量 - 逻辑向量的乘积乘以价值。另一种方法是使用“过滤器”功能,而第三种方法是使用逻辑测试选择带有“[”的元素。 –

+1

你有什么具体的编程问题?请打破你正在努力了解你面临的问题,并提出一些问题,以便其他人可以更好地帮助你。 – wahwahwah

回答

1

数学,最好的办法可能是找到两个数的最小公倍数,并检查其余VS说:

# borrowed from Roland Rau 
# http://r.789695.n4.nabble.com/Greatest-common-divisor-of-two-numbers-td823047.html 
gcd <- function(a,b) if (b==0) a else gcd(b, a %% b) 
lcm <- function(a,b) abs(a*b)/gcd(a,b) 

s <- seq(1000) 
s[ (s %% lcm(3,5)) == 0 ] 
# [1] 15 30 45 60 75 90 105 120 135 150 165 180 195 210 
# [15] 225 240 255 270 285 300 315 330 345 360 375 390 405 420 
# [29] 435 450 465 480 495 510 525 540 555 570 585 600 615 630 
# [43] 645 660 675 690 705 720 735 750 765 780 795 810 825 840 
# [57] 855 870 885 900 915 930 945 960 975 990 

由于您的s是从1到1000每一个数字,你可以改为

seq(lcm(3,5), 1000, by=lcm(3,5)) 

只要使用sum对任一结果如果这就是你想要做的。

道具到@HoneyDippedBadger为搞清楚什么是OP之后。

1

看看这有助于

x =1:1000     ## Store no. 1 to 1000 in variable x 
x       ## print x 
Div = x[x%%3==0 & x%%5==0] ## Extract Nos. divisible by 3 & 5 both b/w 1 to 1000 
Div      ## Nos. Stored in DIv which are divisible by 3 & 5 both 
length(Div) 
table(x%%3==0 & x%%5==0) ## To see how many are TRUE for given condition 
sum(Div)     ## Sums up no.s divisible by both 3 and 5 b/w 1 to 1000 
+0

@RichardScriven谢谢,会做。学习过程! :) –