我想禁用可以执行其他非R相关内容的命令,例如System(),Shell(),例如。
for (year in 2010:2915){
system("calc")
}
在R中运行。
除了锁定用户执行以外的任何建议吗?
感谢
编辑:为了添加更多上下文,我们允许用户在我们的解决方案中创建R脚本,然后传递给R Engine执行,然后我们处理这些结果。
答案 0 :(得分:2)
如果没有编辑R源代码以删除不需要的函数,这将是单调乏味且可能有点危险,我会覆盖这些函数:
# override system()
env <- as.environment("package:base")
unlockBinding("system", env) # bindings in the base R are write-protected
assign(
"system",
function(...){stop("This is a forbidden command!")},
envir=env
)
lockBinding("system", env)
当用户运行system()
时,这将提供以下内容:
&GT;系统()
system()中的错误:这是一个禁止的命令
为了使更改在每次启动R时生效,您可以按照这种方式覆盖任意数量的函数,将它们添加到(写保护的)"Rprofile.site" file中的.First()
:
.First <- function(){
# code to override system() here
# code to override shell() here
# ...
}
请注意,这不会阻止恶意用户重新实施禁用功能。