【问题标题】:alternative to drop=FALSE or changing default behavior [duplicate]替代 drop=FALSE 或更改默认行为 [重复]
【发布时间】:2013-04-08 19:08:27
【问题描述】:

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

【问题讨论】:

  • 在你的代码上写一个 Perl 或 shell 脚本来进行替换。好吧,可能不是那么容易定义,但值得一试。
  • 我相信存在黑客行为(覆盖[ 等),但总的来说,我认为没有办法在全球范围内改变这种行为。最好的选择可能是更新您的代码。
  • 感谢链接之前提出的问题的人,这很完美。

标签: r


【解决方案1】:

你可以像这样重新定义`[`

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

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

也许您可以对特定函数进行本地更改,而不是所有代码?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 2019-09-03
    • 1970-01-01
    • 2018-03-08
    相关资源
    最近更新 更多