如果在R中重复某个值,则提前退出循环或仅获取其中一个值

如果在R中重复某个值,则提前退出循环或仅获取其中一个值,r,loops,R,Loops,下面是一些与我想解决的问题相关的语法,但是一个更简化的版本 假设我想从一个矩阵中获取所有值,并找出它们是否存在于另一个矩阵的特定列中,然后从那里将它们添加到一个空列表中 因此: 我做错了什么 作为跟进,在循环期间还是之后对其进行排序是更好的做法 ie在添加列表后添加一行,执行以下操作: [1]1232 1至[1]1232 3 我也在尽可能提高我的“优雅”。是否有一种方法可以使此代码更具吸引力/效率,而不需要两个循环…此命令将告诉您mat1中的哪些值也位于mat2的第一列: mat1[which(

下面是一些与我想解决的问题相关的语法,但是一个更简化的版本

假设我想从一个矩阵中获取所有值,并找出它们是否存在于另一个矩阵的特定列中,然后从那里将它们添加到一个空列表中

因此:

我做错了什么

作为跟进,在循环期间还是之后对其进行排序是更好的做法

ie在添加列表后添加一行,执行以下操作:

[1]1232 1
[1]1232 3


我也在尽可能提高我的“优雅”。是否有一种方法可以使此代码更具吸引力/效率,而不需要两个循环…

此命令将告诉您mat1中的哪些值也位于mat2的第一列:

mat1[which(mat1 %in% mat2[,1])]
通过这个循环,你将遍历mat2的所有列

for (i in 1:NCOL(mat2))
    list_final<-c(list_final,mat1[which(mat1 %in% mat2[,i])])

我在mat2中没有看到任何3

如果(mat2[j,2],这一行是什么这一定是我产生误解的地方…我要问的问题,简单地说,是…如果mat2中的这个值等于mat1的值,那么就存储在主列表中,否则忽略,下一个玩笑,看起来你把操作符搞错了。
很好!这不完全是我想要的,但肯定给了我足够的时间来解决它。如果您感兴趣的是…
mat1如果您只对第二列mat1[其中(mat1%在%mat2[,2])]感兴趣,则可能不需要循环,并注意需要在mat1上进行的子集设置。您需要mat1[其中(mat1%在%mat2[,2]),而不仅仅是其中(mat1%在%mat2[,2]))。后者给出了数组中的位置,而不是数组的值。尝试使用不同的mat1以查看差异。我感兴趣的是在第二列中获取所有这些值,并在第三列和第四列中匹配它们相应的值。既然您提到了这一点,那么避免循环将更加有效,因为目前我有made多个列表并将其追加以形成包含第3列和第4列元素的子集。使用您的方法可以生成包含相应元素的子集…即在示例中,我们将有一个子集包含
[1]1,4,22314,1[2]2,21,2,1,1
mat1[which(mat1 %in% mat2[,1])]
for (i in 1:NCOL(mat2))
    list_final<-c(list_final,mat1[which(mat1 %in% mat2[,i])])
sort(list_final)