对所有可能的列对执行功能

时间:2016-02-18 16:42:20

标签: r function loops

我正在处理包含为学生(行)分配分数的评分者(列)的数据。数据的结构类似于:

rater.1 <-rep(seq(1:4),each=6)
rater.2 <- rep(seq(2:5), each=6)
rater.3 <- rep(seq(3:6), each=6)
rater.4 <- rep(seq(1:4), each=6)
rater.5 <- rep(seq(2:5), each=6)
rater.6 <- rep(seq(3:6), each=6)

ratings <- cbind(rater.1, rater.2, rater.3, rater.4, rater.5, rater.6)

我想应用一个函数来根据每对可能的评估者计算一个值。所以这个值将被计算出来(rater.1,rater.2),(rater.1,rater.3),(rater.1,rater.4),(rater.1,rater5),(rater.1, rater.6),(rater.2,rater.3),(rater.2,rater.4),...等。

对中评分者的顺序并不重要。

以下是使用函数计算一对中观察到的评级之和的简化示例:

pair.sum <- function(rater.i, rater.j){

 pairsum.ij = sum(rater.1) + sum(rater.j)

 return(pairsum.ij)  
}

我想创建一个结果的向量,以某种方式标记为对中的raters的名称。我知道可能需要某种循环,但我不知道如何构造它以获得所有可能的对的结果。

实际数据包含更多列和行,功能更复杂。但我想从一个简单的例子开始,看看我是否可以弄清楚如何将其概括为实际数据。我是编程新手,非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

我认为这应该有效:

N <- ncol(ratings)
myfun <- function(i,j,data) {sum(data[,i],data[,j])}
vals <- Vectorize(myfun, vectorize.args=list("i","j"))
outer(1:N,1:N,vals,data=ratings)

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]  120  120  120  120  120  120
[2,]  120  120  120  120  120  120
[3,]  120  120  120  120  120  120
[4,]  120  120  120  120  120  120
[5,]  120  120  120  120  120  120
[6,]  120  120  120  120  120  120