我正在尝试使用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是用于双边比赛,但我认为如果我总是寻找“学生最佳”匹配,这可能会起作用。谢谢您的帮助!这是我第一次在这里发帖提问。
答案 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_matrix
,a
和4
(按此顺序)。因此,首选项列表应为:
6