R matchingMarkets :: hri()x [y]中的错误:无效的下标类型'list'

时间:2017-04-29 22:06:54

标签: r algorithm graph syntax-error matching

我正在尝试使用R matchingMarkets::hri()中的Gale-Shapely算法根据他们的偏好将10名学生(A-J)分配到6组(1-6),并受每组中的容量限制。每个学生按组排名前3位,所有其他选择均为空。我的问题是

> hri(nSlots=capacities$capacity, s.prefs = student_prefs_matrix, c.prefs = null_matrix)

返回:    Error in x[y] : invalid subscript type 'list'

hri()确实允许缺少值,根据documentation(这与类似的matchingR::galeShapely.collegeAdmissions()不同),因此这不是问题所在的位置。我将我的输入与文档(第7页)中的示例和所有相同类型的结构进行了比较。以下是我的意见:

> student_prefs_matrix
   a  b  c  d  e  f  g  h  i  j
1  3  1 NA NA NA NA NA NA NA NA
2 NA NA  3 NA NA  3  3  2  2  2
3 NA NA NA NA  1  2 NA NA  1  3
4  1  3 NA  3 NA NA NA NA NA NA
5 NA  2  2  1  3  1  1  1  3  1
6  2 NA  1  2  2 NA  2  3 NA NA


> null_matrix
   1  2  3  4  5  6
a NA NA NA NA NA NA
b NA NA NA NA NA NA
c NA NA NA NA NA NA
d NA NA NA NA NA NA
e NA NA NA NA NA NA
f NA NA NA NA NA NA
g NA NA NA NA NA NA
h NA NA NA NA NA NA
i NA NA NA NA NA NA
j NA NA NA NA NA NA

>  capacities$capacity
 [1] 2 2 2 2 1 1

任何人都可以暗示这个错误可能意味着什么吗?我给出的唯一列表(向量)是nSlots,它应该是一个列表。或者,有没有更好的方法来解决这个匹配问题?我知道Gale Shapely是用于双边比赛,但我认为如果我总是寻找“学生最佳”匹配,这可能会起作用。谢谢您的帮助!这是我第一次在这里发帖提问。

1 个答案:

答案 0 :(得分:1)

要解决您的问题,请务必以适当的格式提供首选项列表。有关此问题的几个示例,请参阅https://matchingmarkets.org/hri.html上的matchingMarkets包文档。

让我们看一个例子,有7名学生,2所大学,每个有3个插槽,并给出如下偏好列表:

int i = 0, sign;

对于您的首选项列表的规范,有两个问题。最明显的问题是你的valgrind目前表明没有一所大学发现任何学生可以接受。因此,不存在稳定匹配。另一个问题出在> s.prefs <- matrix(c(1,2, 1,2, 1,NA, 1,2, 1,2, 1,2, 1,2), 2,7) > c.prefs <- matrix(c(1,2,3,4,5,6,7, 1,2,3,4,5,NA,NA), 7,2) > hri(s.prefs=s.prefs, c.prefs=c.prefs, nSlots=c(3,3)) > s.prefs [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 1 1 1 1 1 1 1 [2,] 2 2 NA 2 2 NA NA > c.prefs [,1] [,2] [1,] 1 1 [2,] 2 2 [3,] 3 4 [4,] 4 5 [5,] 5 NA [6,] 6 NA [7,] 7 NA 。在您的示例中,学生college_prefs_matrix会找到可接受的大学student_prefs_matrixa4(按此顺序)。因此,首选项列表应为:

6