我有一個示例串列,list1其中包含 3 個子串列Alpha、、、。這些子串列中的每一個都包含幾個元素。但是,并非所有元素都在每個子組中。BetaGamma
list1 <- list(Alpha = structure(list(sample_0 = c(3, NA, 7, 9, 2),
sample_1 = c(NA, 8, 5, 4, NA),
sample_2 = c(7, 3, 5, NA, NA)),
row.names = c(NA, -5L),
class = c("tbl_df", "tbl", "data.frame")),
Beta = structure (list(sample_0 = c(2, 9, NA, 3, 7),
sample_1 = c(3, 7, 9, 3, NA),
sample_2 = c(4, 2, 6, 4, 6)),
row.names = c(NA, -5L),
class = c("tbl_df", "tbl", "data.frame")),
Gamma = structure(list(sample_0 = c(NA, NA, 4, 6, 3),
sample_1 = c(3, 7, 3, NA, 8)),
row.names = c(NA, -5L),
class = c("tbl_df", "tbl", "data.frame")))
我想創建一個list2,僅包含 的指定部分list1,例如僅包含兩個元素的子串列sample_1和sample_2。我設法過濾出現在每個子串列中的元素,例如sample_0:
map(list1, `[`, "sample_0")
## Output
$Alpha
# A tibble: 5 x 1
sample_0
<dbl>
1 3
2 NA
3 7
4 9
5 2
$Beta
# A tibble: 5 x 1
sample_0
<dbl>
1 2
2 9
3 NA
4 3
5 7
$Gamma
# A tibble: 5 x 1
sample_0
<dbl>
1 NA
2 NA
3 4
4 6
5 3
但是,當我嘗試過濾每個子組中不存在的子串列時,它會引發錯誤訊息:
map(list1, `[`, "sample_2")
Error in `stop_subscript()`:
! Can't subset columns that don't exist.
x Column `sample_2` doesn't exist.
我的最終目標是創建一個新串列,其中僅包含包含所有一組預先指定的向量的子串列。理想情況下,這將通過將向量傳遞extract_vars給 purrr:map 來完成:
extract_vars <- c("sample_1", "sample_2")
所需的輸出是:
$Alpha
# A tibble: 5 x 3
sample_1 sample_2
<dbl> <dbl>
1 NA 7
2 8 3
3 5 5
4 4 NA
5 NA NA
$Beta
# A tibble: 5 x 3
sample_1 sample_2
<dbl> <dbl>
1 3 4
2 7 2
3 9 6
4 3 4
5 NA 6
(Gamma從所需串列中洗掉的元素,因為它不包含元素sampling_0)。
uj5u.com熱心網友回復:
一種選擇可能是:
map(keep(list1, ~ all(xtract_vars %in% names(.))), ~ select(., all_of(xtract_vars)))
$Alpha
# A tibble: 5 × 2
sample_1 sample_2
<dbl> <dbl>
1 NA 7
2 8 3
3 5 5
4 4 NA
5 NA NA
$Beta
# A tibble: 5 × 2
sample_1 sample_2
<dbl> <dbl>
1 3 4
2 7 2
3 9 6
4 3 4
5 NA 6
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/426673.html
