Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R在多个向量中查找公共元素并应用函数_R - Fatal编程技术网

使用R在多个向量中查找公共元素并应用函数

使用R在多个向量中查找公共元素并应用函数,r,R,我是一个R新手,我想提出一个问题,虽然标题与其他张贴的问题相似,但我没有找到解决方案 我的问题是:我有几个不同长度的向量,我想以两两的方式比较它们,并在每次比较中应用一个函数来生成向量之间的公共元素值,例如4个名为a、B、C、D的向量我想找到a和B、a和C、a和D之间的公共元素,B和C,B和D,C和D 这里有一个更详细的示例(仅两个向量): 我有很多向量,我不知道如何实现for循环来进行两两比较 非常感谢您可以使用outer baseSet <- c('t','qt','er','oa',

我是一个R新手,我想提出一个问题,虽然标题与其他张贴的问题相似,但我没有找到解决方案

我的问题是:我有几个不同长度的向量,我想以两两的方式比较它们,并在每次比较中应用一个函数来生成向量之间的公共元素值,例如4个名为a、B、C、D的向量我想找到a和B、a和C、a和D之间的公共元素,B和C,B和D,C和D

这里有一个更详细的示例(仅两个向量):

我有很多向量,我不知道如何实现for循环来进行两两比较


非常感谢您可以使用
outer

baseSet <- c('t','qt','er','oa','qra','ea','ew','ee','qwt')
set.seed(0)
A <- sample(baseSet, 5)
B <- sample(baseSet, 5)
C <- sample(baseSet, 5)
D <- sample(baseSet, 5)
dFun <- function(x,y){length(which(x%in%y))/min(length(x),length(y))}

outer(list(A,B,C,D), list(A,B,C,D),Vectorize(dFun))
#     [,1] [,2] [,3] [,4]
#[1,]  1.0  0.6  0.2  0.6
#[2,]  0.6  1.0  0.4  0.6
#[3,]  0.2  0.4  1.0  0.4
#[4,]  0.6  0.6  0.4  1.0

baseSet再次感谢您的快速回答,它工作得非常完美。但是,如果我的所有向量都在一个名为list.df的列表中,那么我可以应用:`outer(list.df,list.df,Vectorize(dFun))??谢谢again@user1609452,由于我的列表长度为10000,有没有办法加快dFun函数的速度?要加快您的函数速度,您可以使用
sum(a%in%B)/min(length(a),length(B))
baseSet <- c('t','qt','er','oa','qra','ea','ew','ee','qwt')
set.seed(0)
A <- sample(baseSet, 5)
B <- sample(baseSet, 5)
C <- sample(baseSet, 5)
D <- sample(baseSet, 5)
dFun <- function(x,y){length(which(x%in%y))/min(length(x),length(y))}

outer(list(A,B,C,D), list(A,B,C,D),Vectorize(dFun))
#     [,1] [,2] [,3] [,4]
#[1,]  1.0  0.6  0.2  0.6
#[2,]  0.6  1.0  0.4  0.6
#[3,]  0.2  0.4  1.0  0.4
#[4,]  0.6  0.6  0.4  1.0
list.df <- list(A=A, B=B, C=C, D=D)
outer(list.df, list.df, Vectorize(dFun))
#    A   B   C   D
#A 1.0 0.6 0.2 0.6
#B 0.6 1.0 0.4 0.6
#C 0.2 0.4 1.0 0.4
#D 0.6 0.6 0.4 1.0