2015-10-02 107 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謝謝,會做。學習過程! :) –