6

R 中将二维矩阵减少到 1 行的默认行为是实际删除一个维度。这可以通过将 drop=FALSE 放在矩阵搜索的末尾来“修复”。有没有办法让它成为默认值?我有一个很长的程序,刚刚意识到如果没有,我将不得不在大约 100 个地方添加它......我搜索了 ?options、?'[' 和 ?matrix 无济于事。

4

1 回答 1

8

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

old <- `[`
`[` <- function(...) { old(..., drop=FALSE) }

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

也许您可以将此更改本地化到特定函数,而不是所有代码?

一种替代方法是为矩阵对象编写自己的类,您可以为此提供自己的子集运算符实现。如果您在数量非常有限的地方构建矩阵,这是有道理的,但如果有大量代码路径构建这些矩阵,则可能会出现问题。

于 2013-04-08T20:39:26.957 回答