Re: [問題] list賦值 & matrix資料選擇

作者: andrew43 (討厭有好心推文後刪文者)   2017-07-13 09:49:35
試試這個
沒有什麼高深的部份,就是三個向量逐列塞入 matrix,再逐欄變成 list,
最後就會是一整個 list 了。
# 建假資料
seqno <- c(1, 2)
name <- c("aa", "bb")
type <- list(c("A1", "A2"), c("B1", "B2"))
# x 為所求
x <- apply(rbind(seqno, name, type), 2, as.list)
x
x[[1]]
x[[1]]$seqno # 同 x[[1]][[1]]
x[[1]]$name # 同 x[[1]][[2]]
x[[1]]$type # 同 x[[1]][[3]]
※ 引述《samex4x4 (Same)》之銘言:
: [問題類型]:
:
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
:
: [軟體熟悉度]:
: 請把以下不需要的部份刪除
: 入門(寫過其他程式,只是對語法不熟悉)
:
: [問題敘述]:
: 十分基礎的幾個問題...Orz
: 1.
: 我想要創建list的型態長這樣
: list[[1]]
: $seq_no
: [1] '0001'
: $name
: [1] '水果'
: $type
: [1] 'A' 'B' 'C'
: list[[2]]
: $seq_no
: [1] '0002'
: $name
: [1] '肉類'
: $type
: [1] 'B','C'
: ....
: 現在我手邊有seq_no,name,type 的vector
: (07/13更新:type會是一個長度和seq_no,name相同的list,裡面包不同長度的vector
: 我的問題是 我要怎麼給list按照如上的順序寫入資料?
: 我可以這樣寫接forloop去做↓↓
: list[[1]]$seq_no <- seqno[1]
: list[[1]]$name <- name[1]
: list[[1]]$type <- type[[1]]
: list[[2]]$seq_no <- seqno[2]
: list[[2]]$name <- name[2]
: list[[2]]$type <- type[[2]]
: 但是我有沒有辦法一次性的叫出list[[1]]['seq_no'] list[[2]]['seq_no']....
: 以前用lapply(list, '[[', 1) 可以看到這個值 但要怎麼寫進去沒有頭緒Orz
: 謝謝大家)
: 想要每個寫入給list[[1]] list[[2]]......
: 目前寫到這邊就不太確定要怎麼把內部資料寫進去了
: test <- vector(mode = 'list', length = length(seq_no))
: 要怎麼給每個list[[i]] 寫入資料?
: 我知道用forloop可以寫進去 但感覺蠢翻了...
: 2.
: 我的資料長這樣
: c('A','B','C')
: 另外有一筆選擇資料的matrix
: [1,] T,F,F
: [2,] F,F,T
: [3,] F,T,T
: [4,] F,F,F
: [5,] T,T,T
: 想要輸出另一個matrix為
: [1,] A,NA,NA
: [2,] NA,NA,C
: [3,] NA,B,C
: [4,] NA,NA,NA
: [5,] A,B,C
: 不知道要怎麼寫出來?
: [程式範例]:
:
:
: [環境敘述]:
:
: 請提供 sessionInfo() 的輸出結果,
: 裡面含有所有你使用的作業系統、R 的版本和套件版本資訊,
: 讓版友更容易找出錯誤
:
: [關鍵字]:
: list, matrix
作者: samex4x4 (Same)   2017-07-13 10:29:00
謝謝a大!!!!這個寫法很簡潔漂亮啊!!!
作者: x88776544pc   2017-07-13 11:52:00
用 mapply 也不錯, 省掉 rbind 會快一點

Links booklink

Contact Us: admin [ a t ] ucptt.com