簡體   English   中英

將函數應用於多個向量並將成對比較輸出到矩陣

[英]Apply function to multiple vectors and output pairwise comparisons to matrix

我有 3 個包含超過 1500 個字符串元素的向量,我想對它們進行成對比較以輸出它們之間匹配元素的數量。

我的數據減少了一點:

va <- c("6a460daf68eb0410b51d79e495fbccc7", "e1b32017108e17e41bdabc44bac4df3c", "6ac1327da92d8584008db04b4eaf62d0", "b01a2322e2ca99315646d79cf157cb20", "12dadc27059ea5d3c8cc54e9a28cc4f6", "be73c9685b743a646f2eb0480eee2f8d")
vb <- c("6a460daf68eb0410b51d79e495fbccc7", "e1b32017108e17e41bdabc44bac4df3c","JQ183785.1.1345", "DQ794886.1.1390", "HQ791014.1.1450", "EU764755.1.1328")
vc <- c("6a460daf68eb0410b51d79e495fbccc7", "JQ183785.1.1345", "DQ794886.1.1390", "HQ791014.1.1450", "b01a2322e2ca99315646d79cf157cb20", "EF532786.1.1364")

我做了一個函數來輸出兩個向量之間重合元素的數量:

sharing <- function(v1, v2, share=TRUE){
  if(isTRUE(share)){sh <- length(v1[ v1 %in% v2])}
  else if (isFALSE(share)){sh <- length(v1[ ! v1 %in% v2])}
  return(sh)
}

因此,應用此函數 9 次(每個成對比較包括自我比較一次),我將能夠獲得 9 個具有共享元素的數字:

> sharing(va,va); sharing(va,vb); sharing(va,vc)
[1] 6
[1] 2
[1] 2
> sharing(vb,va); sharing(vb,vb); sharing(vb,vc)
[1] 2
[1] 6
[1] 4
> sharing(vc,va); sharing(vc,vb); sharing(vc,vc)
[1] 2
[1] 4
[1] 6

但我想把它作為一個矩陣:

    va   vb   vc
va   6    2    2
vb   2    6    4
vc   2    4    6

是否有任何預制功能或代碼可以做到這一點?

謝謝您的幫助!

一種選擇是outer應用sharing上的成對組合功能vector在A S list (“LST1”)

lst1 <- mget(paste0("v", letters[1:3])) # placed the vectors in a list
out <- outer(lst1, lst1, FUN = Vectorize(sharing)) #apply the sharing
dimnames(out) <- list(names(lst1), names(lst1)) # set the dim names

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM