drop = FALSE或更改默认行为的替代方法

hed*_*red 5 r

R中用于将2维矩阵减少到1行的默认行为是实际删除维度.这可以通过在矩阵搜索结束时放置drop = FALSE来"固定".有没有办法使这个默认?我有一个很长的程序,只是意识到我必须在大约100个地方添加它,如果没有...我搜索?选项,?'['和?矩阵无济于事.

MvG*_*MvG 7

您可以`[`像这样重新定义:

old <- `[`
`[` <- function(...) { old(..., drop=FALSE) }
Run Code Online (Sandbox Code Playgroud)

此修改应该是交互式作用域的本地修改,因此不会影响依赖于其他行为的例程.但不保证.并准备好这种形式的代码可能会混淆您的代码的读者,他们习惯于其他语义.

也许您可以将此更改本地更改为特定功能,而不是所有代码?

一种替代方法是为矩阵对象编写自己的类,您可以为其提供自己的子集运算符实现.如果在非常有限的几个位置构造矩阵,这是有意义的,但如果有大量代码路径构造这些矩阵,则可能会出现问题.