R/MATLAB : restricting which libraries can be loaded

标签 r matlab testing automation

对于我下学期要学习的 ML 类(class),我们使用的是自动评分系统。我们要求学生自己实现一些标准算法,所以我们想限制学生加载某些库(黑名单或白名单,不确定。)

有什么合理的方法可以用 R 或 matlab 做到这一点吗?还是检查源代码(即正则表达式/grep)是最好的方法?

最佳答案

使用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)

您还需要跟踪 require 函数。


当心偷偷摸摸的学生:如果他们知道这是你阻止包加载的方式,那么他们可以在他们的脚本中关闭跟踪(并可能在之后重新启用它)。您也许还应该在他们的脚本中检查对 trace/untrace/traceOn/traceOff 的调用。你为此付出了多少努力取决于你将做多少手工查看他们的代码以及你的学生有多诚实。如果您阅读这样奇怪的规避代码,应该会很明显。

关于R/MATLAB : restricting which libraries can be loaded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20640321/

相关文章:

python - 为稀疏矩阵交换优化的文件格式

search - 跨多个向量查找不常见元素

python - 如何在 Simulink 的 MATLAB 函数中索引数组值?

ruby - Ruby 和类似类型语言中的数组是向量吗?

r - 更新 Shiny 的 react 数据帧会出现替换错误

matlab更新时间向量

matlab - 非常简单的 MATLAB 代码,但结果不合逻辑

svn - 如何限制对暂存环境的访问

ruby-on-rails - 将 cucumber 翻译成 rspec

Facebook 测试使用同一个 ID 创建的用户,但查询返回不同的 ID