2017-08-04 171 views
2

我想檢查是否allelementslist的A整除與list B的所有元素,如果餘數爲0所有elements,我想print A.如何將列表中的每個元素與R中另一個列表中的每個元素分開?

我的例子中的相應elements到目前爲止的代碼

first<-c(2,4,6,8,10,12) 
second<-c(2,3) 

for (i in first){ 
    for (j in second){ 
     if (i%%j==0){ #if any elements in first is divisible by all elements in second 
      print(i) 
      } 
     } 
    } 

但它給我的輸出這樣

[1] 2 
[1] 4 
[1] 6 
[1] 6 
[1] 8 
[1] 10 
[1] 12 
[1] 12 

我期待的東西[1] 6,12

回答

3

我們可以使用outer獲得每個組合的彈性模量,然後rowSums看哪個不留餘,

first[rowSums(outer(first, second, `%%`)) == 0] 
#[1] 6 12 
+1

不錯!我正在考慮'第一個[第一個%% prod(second)== 0]',但是當'second'有點像'c(2,3,6)'時,這個問題就搞砸了。只是爲了好玩,任何可以解決的方法? – Aramis7d

0

你的代碼打印出來的所有號碼first可由任意整除second。看一看在all function,你正在尋找的東西像

first<-c(2,4,6,8,10,12) 
second<-c(2,3) 

for (i in first){ 
    if (all(i %% second == 0)){ #if any elements in first is divisible by all elements in second 
     print(i) 
    } 
} 
+0

我不認爲這會返回正確的輸出。你有沒有檢查它的作用? –

+0

是的,它返回正確的輸出(如果我正確理解問題)。我用更完整的代碼示例更新了我的答案。 – oha

0

奧利弗有權,完成代碼,你應該這樣做:

for (i in first){ 
    if(all(i%%second==0)){ 
    print(i) 
    } 
} 
相關問題