我有一个矩阵我试图在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
答案 0 :(得分:12)
这个答案是不正确的,但是对我来说很有启发性,对其他人也有启发,所以我会把它留下来。
正如@mnel所指出的,基本R函数t()
必须被另一个同名函数掩盖。尝试删除功能t()
并再次执行t(xx)
。我保证你会得到正确的结果。
运行时你会得到什么:
rm(t)
t(xx)
如果(尽管我保证!)它仍然不起作用,您可以完全指定要使用的t()
版本,如下所示:
base::t(xx)
以下是上述两项建议不足的原因
来自?UseMethod
:
命名空间可以注册泛型函数的方法。支持 这个,'UseMethod'和'NextMethod'在两个地方搜索方法: 首先在称为泛型函数的环境中,以及 然后在注册数据库中为其所在的环境 定义泛型(通常是命名空间)。所以通用的方法 函数需要在调用环境中可用 通用的,或者必须注册。 (无论是否他们都没关系 在定义泛型的环境中可见。)
我错误地认为S3方法调度会在t.default()
和中找到base:::.__S3MethodsTable__.
之类的方法然后在<{1}} < em>在之前查看调用环境,而反之则更接近事实。
从GSee编辑
这是一个交互式会话,用于演示可能存在的问题。
asNamespace("base")
答案 1 :(得分:0)
也许您可以编写自己的函数:
xx <- matrix(c(3,7,4,8), 2, byrow = TRUE)
transp <- function(n){
TM <- matrix(, nrow = ncol(n), ncol = nrow(n))
for (i in 1 : nrow(TM)){
for (j in 1 : ncol(TM)){
TM[i, j] <- n[j, i]
}
}
print(TM)
}
transp(xx)