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

标签 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)

返回这个: x[y] 中的错误:下标类型“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

任何人都可以提示此错误可能意味着什么吗?我给出的唯一列表(向量)是用于 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 ...

关于R matchingMarkets::hri() x[y] 错误:无效下标类型 'list',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43700914/

相关文章:

r - 同时对数据框的特定列进行子集化和操作

r - 将数据框中的所有列相互相乘的有效方法

在字符串中定位不平衡括号的算法

algorithm - 你如何检测字符串列表中的重复?

arrays - 将最小可能的正整数插入唯一整数数组

graph - Common Lisp 中的反转有向图

r - 如何在 R 中使用 ksvm 执行新颖性检测?

r - R 中最小二乘法的自制实现显示意外行为

algorithm - 每个节点最多有一个出站边缘的完全连接的有向图叫什么?

R:如何有效地可视化大型图网络