【问题标题】:How to subset a list of vectors based on a vector of indexes?如何根据索引向量对向量列表进行子集化?
【发布时间】:2017-12-13 22:38:03
【问题描述】:

我想使用purrr 来对列表中的元素进行子集化

u <- list(a=1:10, b=1:10)

使用maxCol 作为从 1 开始的索引向量的上限。例如,假设

maxCol <- c(6L, 3L)

那么输出应该是这样的

$a
[1] 1 2 3 4 5 6

$b
[1] 1 2 3

实际上,我想保留a 中从位置1 到位置6 的所有值,以及b 中从位置1 到3 的所有值。 我知道如何使用循环,但我想使用 purrr 。例如,我认为这样的事情会起作用,但它没有:

map2(u, maxRow, u[1:maxCol])

【问题讨论】:

  • 保持你的语法,你可以使用map2(u, maxCol, ~.x[1:.y]),但这似乎比简单地使用head更复杂。
  • @ThomasK 谢谢,一旦@ChiPak 回答,我也想出了同样的想法。它实际上对我来说看起来更容易,因为我完全忘记了 head() 中的论点 n,如果我不想从 1 开始,它也更通用(因此我敢说优越)

标签: r purrr


【解决方案1】:

我们可以从base R使用Map

Map(head, u, n = maxCol)

【讨论】:

    【解决方案2】:

    这对我有用:

    map2(u,maxCol,head)
    

    输出

    $a
    [1] 1 2 3 4 5 6
    
    $b
    [1] 1 2 3
    

    【讨论】:

    • 还有map2(.x=u, .y=maxCol, .f= ~ .x[1:.y])
    猜你喜欢
    • 2015-01-17
    • 2014-07-30
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多