gpt4 book ai didi

r - 如果通常的 `t( )` 不起作用,如何在 r 中转置矩阵?

转载 作者:行者123 更新时间:2023-12-04 10:40:51 25 4
gpt4 key购买 nike

我有一个矩阵,我试图在 R 中转置,但 t() 函数没有返回正确的答案。如何转置矩阵?

> xx=matrix(c(3,7,4,8),2,byrow=TRUE)
> xx
[,1] [,2]
[1,] 3 7
[2,] 4 8
> t(xx)
[1] 0.7071068 0.7071068

最佳答案

这个答案是不正确的,但在某些方面对我很有启发性,对其他人可能也有启发,所以我会留下它。

正如@mnel 所指出的,基本 R 函数 t()必须被另一个同名函数屏蔽。尝试删除功能 t()和做 t(xx)再次。我保证你会得到正确的结果。

当你运行这个时你会得到什么:

rm(t)
t(xx)

如果(尽管我保证!)它仍然不起作用,您可以完全指定 t() 的版本你想使用,像这样:
base::t(xx)

这就是为什么上面的两个建议是不够​​的

来自 ?UseMethod :

Namespaces can register methods for generic functions. To support this, ‘UseMethod’ and ‘NextMethod’ search for methods in two places: first in the environment in which the generic function is called, and then in the registration data base for the environment in which the generic is defined (typically a namespace). So methods for a generic function need to be available in the environment of the call to the generic, or they must be registered. (It does not matter whether they are visible in the environment in which the generic is defined.)



我错误地认为 S3 方法调度会寻找类似 t.default() 的方法。首先在 base:::.__S3MethodsTable__.然后也许在 asNamespace("base")在调用环境中查看之前,而反向更接近于事实。

从 GSee 编辑

这是一个交互式 session ,用于演示可能是什么问题。
> t <- function(x, ...) print("generic masked")
> t.default <- function(x, ...) print("t.default masked")
> t.matrix <- function(x, ...) print("t.matrix was used")
> t.numeric <- function(x, ...) print("t.numeric was used")
> xx=matrix(c(3,7,4,8),2,byrow=TRUE)
> t(xx)
[1] "generic masked"
> base::t(xx)
[1] "t.matrix was used"
> rm(t.matrix)
> base::t(xx)
[1] "t.numeric was used"
> rm(t.numeric)
> base::t(xx)
[1] "t.default masked"
> rm(t.default)
> base::t(xx)
[,1] [,2]
[1,] 3 4
[2,] 7 8

关于r - 如果通常的 `t( )` 不起作用,如何在 r 中转置矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13574165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com