tft每日頭條

 > 圖文

 > r語言的運算法則

r語言的運算法則

圖文 更新时间:2024-11-15 05:28:39

今天的内容應該算是比較簡單的,如果看着看着覺得複雜了,那絕對是被我亂整給整複雜的

r語言的運算法則(R語言第30篇組合數)1

咱提個簡單明了的問題先,知道協方差矩陣不?或者相關系數矩陣也行,反正這倆長得差不多

R裡頭提供的cov和cor可以直接産生協方差或相關系數的矩陣,但有點了解的親們應該知道,這種顯示方式從表格形式來說是一種寬格式,而且對角線兩邊的數是重複的,也就是說它雖然顯示得好看,但要後續做提取啥的還是有點小繁瑣的,尤其是當我們希望提取出數值的同時還要帶上相關的标題,那更是格式轉着轉着,一不小心就找不着了

上例子:

r語言的運算法則(R語言第30篇組合數)2

從cov和cor的幫助文件裡,咱可以看到一點端倪,那就是它其實支持兩種輸入方式,一種是像上面這樣把整個二維表放進去作為x,這時計算出來的是協方差矩陣,還有一種是同時輸入x和y,但兩者都是向量,這樣計算結果就隻有一個數值

r語言的運算法則(R語言第30篇組合數)3

如果像上邊那樣需要3列數據間的協方差,但又不想用寬格式來顯示的話,那咱需要的表至少得包含兩部分:

1) 由三列數據的列标題兩兩組合得到的信息列

2) 由标題組合計算出來的協方差

先上手做第一部分,3列标題兩兩組合,意味着是3個中抽取兩個,用函數choose可以先預判下這個組合的長度(這個不是必要步驟,可以省略),而用函數combn可以直接生成組合後的矩陣

Index <- names(Table1[,c(-1,-3)]) #抽取出3列的标題

COVlist <- combn(x = Index,m = 2) #兩兩組合,抽取數為2

r語言的運算法則(R語言第30篇組合數)4

輸出的形式行列方向是反的,所以後邊做的時候都加了轉置函數t()

接下來寫得有點長,做完才發覺自己不知不覺的就挖了個坑把自己埋了

#按列名稱從Table1中提取數據的function

Pickout <- function(x) {Table1[,colnames(Table1) == x]}

Inputlist <- apply(t(COVlist),c(1,2),Pickout) #把Table1提取出來的6列組成3 3的一個list

COVwithPick <- function (x) {cov(Inputlist[,,1][,x],Inputlist[,,2][,x])}

#做個提取指定列的function計算協方差cov

Value <- apply(data.frame(c(1:3)),1,COVwithPick)

#把标題和協方差計算結果合并到一起

COVresult <- data.frame(t(COVlist),Value)

r語言的運算法則(R語言第30篇組合數)5

做倒是做出結果來了,3列兩兩組合出三個協方差,就是步驟嘛,看着有點費事

啊咧~~~早知道費這勁我還用啥組合數列呀,唉~~~~

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved