R 将函数应用于置换对象

R 将函数应用于置换对象,r,function,permutation,R,Function,Permutation,比如说,我有20件物品。我有一个执行成对分析的函数。我想对所有对进行两两分析。假设函数是cor.test。而不是写出所有190对 a <- cor.test(1,2); b <- cor.test(1,3); c <- cor.test(1,4) ... a您可以使用combn,不清楚如何进行矩阵之间的关联,但这里我将如何进行,假设您有向量: ## put your objects within the same list , you can use `mget` if yo

比如说,我有20件物品。我有一个执行成对分析的函数。我想对所有对进行两两分析。假设函数是cor.test。而不是写出所有190对

a <- cor.test(1,2);
b <- cor.test(1,3);
c <- cor.test(1,4)
...

a您可以使用
combn
,不清楚如何进行矩阵之间的关联,但这里我将如何进行,假设您有向量:

## put your objects within the same list , you can use `mget` if you have 
## some pattern for your objects names
ll <- list(obj1,obj2,obj3)
## then combining to get all permutations and applying your function
combn(seq_len(length(ll)),2,FUN = function(x){
  cor.test(ll[[x[1]]],ll[[x[2]]])
},simplify=FALSE)
尝试:

或:


谢谢我得到了一个显示所有排列的输出([1]12;[2]13;[3]14;等等),但是我如何检索函数输出(在本例中为[1]12的相关分数)?@user1038055当您执行
a时,您的函数输出是什么?我没有使用相关测试,但我自己使用了一个更复杂的脚本来比较矩阵。但我不确定这与从脚本中查找输出有什么关系?如果我使用的是您的对象(obj1、obj2、obj3),我应该得到三个相关统计数据(1、1、1)作为输出,不?@user1038055太棒了!如果您使用自己的函数,为什么要谈论与
cor
函数混淆的
cor.test
。当我运行顶层脚本时,我收到警告“有限观察不够”。如果我把objlist列为一个列表(=列表(obj1,obj2,obj3),那么我会得到9个相关测试的结果(太多了),并将objlist[[I]]和objlist[[j]]全部列为数据。也许我做错了什么,或者你的输出也有问题吗?objlist将不得不生成。我添加了“If(I!=j)”因此,该对象与自身不相关。您现在将得到6个结果。我投票结束这个问题,因为不清楚您在问什么。而且您也没有提供一个具有预期输出的可复制示例。
obj1 = 1:5
obj2 = 1:5
obj3 = 1:5
objlist = c(obj1, obj2, obj3)

outlist = list()
len = length(objlist) 
for(i in 1:len) for (j in 1:len) if(i != j) {
    outlist[[length(outlist)+1]] = cor.test(objlist[[i]], objlist[[j]])
}
outlist = sapply(objlist, function(x) { sapply(objlist, function(y) cor.test(x,y)) } )