通常禁用矩阵的维度下降?

Wol*_*ker 26 r matrix

众所周知,如果列的行或行维度为1,则R会尝试将矩阵减少为向量.可以通过使用该drop=F命令来防止维度的自动删除.

但是,我目前正在编写一个大型R包,并且需要在我的代码中禁用几百次的维度丢弃,因此我必须手动查找这些位置并添加drop=F 数百次.

因此,我想知道是否有任何选项或可能通常禁用R中矩阵的维数下降?

Jam*_*mes 27

你可以通过重新定义[函数来做到这一点:

x <- matrix(1:4,2)

`[` <- function(...) base::`[`(...,drop=FALSE)
x[,1]
     [,1]
[1,]    1
[2,]    2
Run Code Online (Sandbox Code Playgroud)

drop现在调用时无法覆盖参数,因此您可能希望谨慎使用它并在完成后删除.

  • 这样你就可以在你想要的时候设置drop = TRUE:``[`< - function(...,drop = FALSE)base ::`[`(...,drop = drop)`.(b/c的反引号,Markdown不会在评论中正确呈现这一点,但这个想法应该是明确的.) (9认同)
  • 可能建议不要在包中导出被覆盖的`[`函数,以免弄乱用户的代码. (5认同)