Re: [問題] 取矩陣的非對角線元素之組合名稱

看板R_Language作者時間10年前 (2014/05/03 01:29), 10年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/3 (看更多)
x = outer( colnames(M), rownames(M), paste, sep = "-" ) x[lower.tri(x)] an = Row indexes of lower triangular part of a Matrix. bn = Column indexes of lower triangular part of a Matrix. ※ 引述《andrew43 (討厭有好心推文後刪文者)》之銘言: : ※ 引述《andrew43 (討厭有好心推文後刪文者)》之銘言: : : 標題: [問題] 取矩陣的非對角線元素之組合名稱 : : 時間: Fri May 2 18:14:28 2014 : : [問題類型]: : : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : : [軟體熟悉度]: : : 使用者(已經有用R 做過不少作品) : : [問題敘述]: : : 對於具有 colnames 和 rownames 的一個 matrix, : : 該如何取得所有非對角線元素的 colnames 和 rownames 的組合的字串向量? : : [程式範例]: : : M <- matrix(1:25, 5) : : colnames(M) <- c("a","b","c","d","e") : : rownames(M) <- c("a","b","c","d","e") : : 可得到 M : : # a b c d e : : #a 1 6 11 16 21 : : #b 2 7 12 17 22 : : #c 3 8 13 18 23 : : #d 4 9 14 19 24 : : #e 5 10 15 20 25 : : 接下來,我想取得一個字串向量 mynames 使其結果為 : : c("b-a" , "c-a", "d-a", "e-a", "c-b", ... , "e-c", "e-d") : : 也就是矩陣 M 的左下側非對角線元素的列名與欄名組合。 : : 請教有沒有什麼方式可以快速達成? : : 用 loop 是可以達成,但我想應該有更乾淨的辦法。 : : -- : : http://apansharing.blogspot.com/ : : -- : : → clickhere:cbind(rownames(M)[c(2:5,3:5,4:5,5)],rep(colnames(M), 05/02 20:48 : : → clickhere:,c(4,3,2,1)) 05/02 20:49 : : → clickhere:paste by row with sep="-" 05/02 20:49 : 謝謝 clickhere 版友。 : 我的這個問題之核心其實可以抽象化為如何產生以下二組數列: : an = 2,3,4,...,N, 3,4,...,N, 4,...,N, ...., N-2, N-1,N, N : 以及 : bn = 連續 N-1 個 1, 連續 N-2 個 2, ... 連續 N-(N-1) 個 N-1,以及尾巴一個 N。 : 假如 N 很小,按 clickhere 板友的方法可行, : 但我的 dim(M) 可能不是定值且可能很大, : 不知道有沒有什麼方式可以以 length(N) 為引數產生 an 及 bn? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 119.14.64.43 ※ 文章網址: http://www.ptt.cc/bbs/R_Language/M.1399051740.A.5B3.html ※ 編輯: HeroNoah (119.14.64.43), 05/03/2014 01:37:13 ※ 編輯: HeroNoah (119.14.64.43), 05/03/2014 01:42:52

05/03 01:43, , 1F
非常謝謝。看來就是需要 outer() 沒錯。
05/03 01:43, 1F
文章代碼(AID): #1JOzNSMp (R_Language)
文章代碼(AID): #1JOzNSMp (R_Language)