对于ML课程,我将在下学期学习,我们正在使用自动分级系统。我们要求学生自己实施某些标准算法,因此我们希望限制学生加载某些库(使用黑名单或白名单,不确定。)
有没有合理的方法用R或matlab做到这一点?或者正在检查源代码(即regex / grep)的最佳方法?
答案 0 :(得分:1)
使用trace
功能更改library
的行为。调用library
函数时,以下代码将检索传递给library
的包的名称,然后在禁止列表中抛出错误。
trace(
base::library,
function()
{
package_name <- if(parent.frame()$character.only)
{
parent.frame()$package
} else
{
deparse(substitute(package, parent.frame()))
}
if(package_name %in% c("ggplot2", "lattice")) #or whichever packages are banned
{
stop("The ", sQuote(package_name), " package is not allowed")
}
}
)
library(ggplot2)
library("ggplot2", character.only = TRUE)
library(plyr)
您还需要trace
require
功能。
小心鬼鬼祟祟的学生:如果他们知道这是你阻止包加载的方式,那么他们可以在他们的脚本中关闭跟踪(并且可能在之后重新启用它)。您也许应该检查其脚本中对trace
/ untrace
/ traceOn
/ traceOff
的来电。你投入了多少精力取决于你手动查看他们要做的代码的程度以及学生的诚实程度。如果你阅读它,那些奇怪的回避代码应该脱颖而出。