我正在尝试在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
查找可接受的大学4
,6
和1
(按此顺序)。因此,首选项列表应为:> 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 ...