有些功能browser只有在交互使用时才有意义.
人们普遍认为该subset功能只能以交互方式使用.
类似地,sapply它不适合程序化使用,因为它不会简化零长度输入的结果.
我正在尝试制作一份详尽的功能列表,这些功能仅适用于程序化使用.
计划是制作一个包检查工具,看看是否有任何这些函数被调用并发出警告.
还有像其他的功能file.choose和readline需要交互性,但这些都是OK的包包括,因为最终用途将是互动的.我对这个用例并不太在意这些用例,但可以随意将它们添加到列表中.
我错过了哪些功能?
(随意编辑.)
应小心处理以下功能(这并不一定意味着它们不适合编程):
输出根据输入不具有一致输出类的函数:sapply,mapply(默认情况下)
功能,其内部行为取决于输入长度是不同的:sample,seq
该环境中评估他们的一些参数的函数:$,subset,with,within,transform.
这违背正常的环境下使用功能:attach,detach,assign,<<-
允许部分匹配的函数: $
函数才有意义在交互式用法:browser,recover,debug,debugonce,edit,fix,menu,select.list
功能,可以是一种威胁(病毒),如果与用户输入使用:source,eval(parse(text=...)),system.
此外,在某种程度上,每个生成警告而不是错误的函数.我建议使用options(warn = 2)在编程应用程序中将所有警告转换为错误.然后可以通过suppressWarnings或允许特定情况try.