【问题标题】:How can I work with sub-lists in a function in R?如何在 R 中的函数中使用子列表?
【发布时间】:2021-01-13 02:45:30
【问题描述】:

我有一个包含列表和子列表的数据表。

DT <- data.table (A=c(1,1,1,2,2,3,3,4,4,4,5), B=c(200,210,300,420,289,365,587,250,110,500,800), C=c(0.6,0.35,0.6,0.85,0.22,0.36,0.39,0.31,0.33,0.58,0.66))
DT
DT_Split <- split(DT, DT$A)
names(DT_Split) <- c(paste("FF", names(DT_Split), sep = ""))
list2env(DT_Split, .GlobalEnv)
lapply(DT_Split, function(x){
  x[, NewColumn := cumsum(c(TRUE, diff(B) < 0))]})
DT_Split2 <- lapply(DT_Split, function(x) split(x, x$NewColumn))
DT_Split2$FF1$`1`

如何在此子列表中添加后缀,1 in FF1 in DT_Split2(最后一行)? 如何在函数中处理此子列表?

更新 我不想手动寻址或添加后缀。我的意思是这样的一行:

names(DT_Split) <- c(paste("FF", names(DT_Split), sep = "")) 
list2env(DT_Split, .GlobalEnv)

但对于子列表。

非常感谢, 米拉德

【问题讨论】:

    标签: r function data.table sublist


    【解决方案1】:

    您已经在names(DT_Split) &lt;- 行中使用了它,您只需访问子列表,如果您只想更改FF1,请使用第一行,如果您想更改所有子列表,请使用lapply

    # paste0 is the equivalent to paste(..., sep="") but faster
    # also no need to enclose it in c() call
    names(DT_Split2$FF1) <- paste0(names(DT_Split2$FF1) , "Suff")
    lapply(DT_Split2, function(x) {names(x)<-paste0(names(x) , "Suff"); x})
    

    提取所有子列表的名称可以很容易地实现:

    lapply(name.of.list, names)
    #lapply(DT_Split2, names)
    

    【讨论】:

    • 感谢您的回答。有没有办法提取所有子列表的名称?我需要将所有子列表的名称添加到函数中。
    • 非常感谢,它有效,我可以看到子列表的名称。您能帮我了解如何在功能中使用它们吗?例如,这里lapply(DT_Split, function(x){ x[, NewColumn := cumsum(c(TRUE, diff(B) &lt; 0))]})' 可以使用DT_Split 的名称,但不能使用子列表的名称。再次感谢
    • 试试names(list.with.data.tables)&lt;- paste0("table", 1:10)。您可以在不知道名称的情况下直接在 lapply 中访问它们,所以我不明白重命名它们有什么帮助。
    • 说我想访问第三个表,即 table3 我可以使用 list.with.data.tables[[paste0("table", 3)]] =&gt; 来获取第 i 个元素 list.with.data.tables[[paste0("table", i)]] 或者只是 list.with.data.tables[[i]]
    • 一个例子是使用 mtcars 并在将数据集拆分为齿轮数量后回归 mpg ~ cylmt.split &lt;- split(mtcars, mtcars$gear),然后获取每个模型的摘要 lapply(mt.split, function(x) summary(lm(formula=mpg~cyl,data=x )))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2020-01-14
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    相关资源
    最近更新 更多