我正在尝试在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'
documentation表示,hri()确实允许缺少值(这与类似的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

任何人都可以暗示这个错误是什么意思吗?我给出的唯一列表( vector )是用于nSlots的列表。或者,是否有更好的方法来解决此匹配问题?我知道Gale Shapely适用于2面匹配,但是我认为如果我一直在寻找“学生最佳”匹配,这可能仍然有效。谢谢您的帮助!这是我第一次在此处发布问题。

最佳答案

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

让我们看一个示例,该示例有7个学生,2个学院(每个学院有3个职位),并给出了如下的偏好列表:

> 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_matrix。在您的示例中,学生a查找可接受的大学461(按此顺序)。因此,首选项列表应为:
> student_prefs_matrix
      a  b  c  d ...
[1,]  4  1  6  5 ...
[2,]  6  5  5  6 ...
[3,]  1  4  2  4 ...
[4,] NA NA NA NA ...
[5,] NA NA NA NA ...
[6,] NA NA NA NA ...

10-08 02:33