2017-08-04 168 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) 
    } 
} 
相关问题