使用 R,我的資料集L是一個串列串列。我的print(L)產生以下輸出:
[[1]]
[[1]][[1]]
[1] 0.8198689
[[1]][[2]]
[1] 0.8166747
[[2]]
[[2]][[1]]
[1] 0.5798426
[[2]][[2]]
[1] 0.5753511
[[3]]
[[3]][[1]]
[1] 0.4713508
[[3]][[2]]
[1] 0.4698621
我想獲得第二列的向量。但是unlist(L[[2]])給了我第二行(不是第二列)并L[,2]給了我錯誤Error in L[, 2] : incorrect number of dimensions。我也試過L$'2' 但沒有用。
如何在 R 中獲取此資料集第二列的向量?
uj5u.com熱心網友回復:
1)假設在最后使用 sapply 的 Note 中可重現地顯示輸入(如果您希望將其作為串列,則使用 lapply)。不使用任何包。
sapply(L, `[[`, 2)
## [1] 0.8166747 0.5753511 0.4698621
2)使用 purrr 我們有:
library(purrr)
transpose(L)[[2]]
## [[1]]
## [1] 0.8166747
##
## [[2]]
## [1] 0.5753511
##
## [[3]]
## [1] 0.4698621
3)如果我們知道 L 是規則形狀的,我們可以將其轉換為矩陣,然后取第二列。
matrix(unlist(L), length(L), byrow = TRUE)[, 2]
## [1] 0.8166747 0.5753511 0.4698621
或作為串列
do.call("rbind", L)[, 2]
4)這里的第二列是每個“行”中的最后一項,如果這是你想要的,即使串列參差不齊,它也會起作用,然后試試這個
mapply('[[', L, lengths(L))
## [1] 0.8166747 0.5753511 0.4698621
或作為串列
Map('[[', L, lengths(L))
筆記
# input in reproducible form
L <- list(
list(0.8198689, 0.8166747),
list(0.5798426, 0.5753511),
list(0.4713508, 0.4698621))
uj5u.com熱心網友回復:
你能解釋一下如何sapply做這項作業嗎?
我假設這sapply將在串列中應用一個函式,L但這里的函式究竟是什么?據我所知,'[['不是一個函式
uj5u.com熱心網友回復:
使用 using 執行此操作的簡單方法purrr是使用map(),它回傳一個串列。
library(purrr)
map(L, 2)
如果您想要一個(數字)向量,請使用map_dbl().
map_dbl(L, 2)
# [1] 0.8166747 0.5753511 0.4698621
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/399267.html
