簡體   English   中英

R創建一個字符向量列表

[英]R create a list of character vectors

我正在嘗試將鄰接矩陣處理為社區列表,輸出應為向量列表(字符類型)

例如

l1[1] = c("a","b","c")
l1[2] = c("d")
l1[3] = c("e","f")

我正在嘗試在for循環中實現這一點:

l1=vector("list")

for(kn in 1:nrow(adjFinal)){
  temp = c()

  for(tm in 1:ncol(adjFinal))
    {
    if(adjFinal[kn,tm]==1)
      temp=c(temp,colnames(adjFinal)[tm])
  }

  l1[kn] = temp
}

但是我不斷收到“要替換的項目數不是替換長度的倍數”的警告,並且列出了長度為1的3個向量,例如:

l1[1] = "a"
l1[2] = "d"
l1[3] = "e"

更新:這是adjFinal:

3 x 6 sparse Matrix of class "dgCMatrix"
  a b c d e f
b 1 1 1 . . .
d . . . 1 . .
e . . . . 1 1

和dput(adjFinal):

new("dgCMatrix"
    , i = c(0L, 0L, 0L, 1L, 2L, 2L)
    , p = 0:6
    , Dim = c(3L, 6L)
    , Dimnames = list(c("b", "d", "e"), c("a", "b", "c", "d", "e", "f"))
    , x = c(1, 1, 1, 1, 1, 1)
    )

先感謝您。

你可以試試:

apply(adjFinal,1,function(x) colnames(adjFinal)[which(x==1)])
#$b
#[1] "a" "b" "c"
#$d
#[1] "d"
#$e
#[1] "e" "f"

考慮到您有一個稀疏矩陣,因此如果您有一個較大的矩陣,則上述方法可能效率不高,因為apply會將稀疏矩陣強制為常規矩陣。 為避免這種情況,您還可以嘗試:

adj2<-as(adjFinal,"dgTMatrix")
split(colnames(adjFinal)[adj2@j+1],adj2@i)

這將獲得相同的結果,但效率更高。

暫無
暫無

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

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