我有一個矩陣,我想在R中轉置,但t()函數沒有返回正確的答案。我如何轉置矩陣?如果通常的`t()`不起作用,如何在r中轉置一個矩陣?
> 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
我有一個矩陣,我想在R中轉置,但t()函數沒有返回正確的答案。我如何轉置矩陣?如果通常的`t()`不起作用,如何在r中轉置一個矩陣?
> 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
:
命名空間可以註冊通用函數的方法。爲了支持 此,「UseMethod」和「NextMethod」搜索方法在兩個地方: 首先在其通用函數被調用環境, 然後在註冊數據基地環境,使 通用被定義(通常是一個名字空間)。因此,通用 函數的方法需要在調用 泛型的環境中可用,或者必須進行註冊。 (這不要緊,他們 是否在其中通用定義環境可見。)
我錯誤地認爲S3方法分派查找方法,如在base:::.__S3MethodsTable__.
t.default()
第一和然後也許在asNamespace("base")
之前尋找在呼叫環境,而相反是更接近事實。從GSEE
編輯下面就來證明什麼,本來這個問題的交互式會話。
> 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
您是否重新定義了工作空間中的't'函數? – mnel
即類似於't < - function(...)rep(sqrt(.5),2)' –
與此類似嗎? http://stackoverflow.com/a/12019678 – GSee