代码之家  ›  专栏  ›  技术社区  ›  Jack Arnestad

将数据帧转换为特殊格式的列表以用于函数

  •  2
  • Jack Arnestad  · 技术社区  · 6 年前

    我有一个如下的数据框架:

    df = data.frame(name = c("chr", "test"), ncol = c(2, 3))
    

    但是,对于函数(complexheatmap)的输入,我需要如下列表:

    list(chr = list(ncol = 2), test = list(ncol = 3))
    

    从这个数据帧转换成这种格式的列表最简单的方法是什么?做 as.list 格式不正确。

    谢谢! 杰克

    2 回复  |  直到 6 年前
        1
  •  2
  •   Julius Vainora    6 年前

    一种方法是使用 plyr . 我想你可能还有不止两列,所以让我们

    df <- data.frame(name = c("chr", "test"), ncol = c(2, 3), a = 1:2)
    #   name ncol a
    # 1  chr    2 1
    # 2 test    3 2
    

    然后

    dlply(df, .(name), function(r) as.list(r[-1]))
    # $chr
    # $chr$ncol
    # [1] 2
    #
    # $chr$a
    # [1] 1
    #
    #
    # $test
    # $test$ncol
    # [1] 3
    #
    # $test$a
    # [1] 2
    #
    #
    # attr(,"split_type")
    # [1] "data.frame"
    # attr(,"split_labels")
    #   name
    # 1  chr
    # 2 test
    
        2
  •  1
  •   akrun    6 年前

    一个选择是 split base R

    split(setNames(as.list(df$ncol), rep('ncol', nrow(df))), df$name)