【发布时间】:2014-06-12 21:33:51
【问题描述】:
像browser 这样的一些函数只有在交互使用时才有意义。
人们普遍认为subset 函数should only be used interactively。
同样,sapply 不适合编程使用,因为它不会简化零长度输入的结果。
我正在尝试列出仅不适合编程使用的函数的详尽列表。
计划是做一个包检查工具,看看这些函数是否被调用并给出警告。
还有其他功能,如 file.choose 和 readline 需要交互性,但这些可以包含在包中,因为最终使用将是交互性的。对于这个用例,我不太关心这些,但可以随意将它们添加到列表中。
我错过了哪些功能?
【问题讨论】:
-
imho
attach永远不应该被使用,尤其是不能以编程方式使用。当然还有View、edit和朋友。我不确定我是否同意sapply。 -
@Roland 同意
attach。我对sapply的看法是,由于零长度输入,它会导致太多模糊的错误。例如,sapply(x, length)返回一个整数向量,除非x的长度为0,在这种情况下您会得到一个列表。如果您知道输出的大小是恒定的,则使用vapply,否则使用lapply。 -
顺便说一句,我提出这个问题的动机是我一直不小心在我的代码中留下对
browser的调用,如果你将它签入存储库,这看起来很愚蠢。 -
也许你也应该警告
cat。通常应该使用message。 -
这可能有点激烈。在编程中使用诸如
subset之类的函数的问题在于它们对参数使用非标准评估。如果那些使用非标准评估评估的参数是传递变量,这只是一个潜在的问题。如果接受非标准评估的参数传递给常量表达式,那么这些函数仍然可以安全地在函数中使用。例如,subset(data, id == 1)在函数中不会有问题。
标签: r interactive