gpt4 book ai didi

r - 向大型 (16Mill) 列表的所有元素添加一些字符串(可能是关于应用语法的问题)

转载 作者:行者123 更新时间:2023-12-01 10:18:38 25 4
gpt4 key购买 nike

我正在尝试获得如下所示的内容:

mylist <- list(c("a"), c("a", "b"), c("a","b","c"))

变成这样的东西:

list(c("y ~ a"), c("y ~ a + b"), c("y ~ a + b + c"))

对于一个元素,我可以这样做:

test <- paste0("y ~ ", paste0(mylist[[3]], collapse = " + "))  
test
[1] "y ~ a + b + c"

所以我想我会尝试使用 apply 并且它也有效:

mylistupdater <- function(X){
mylist[[X]] <- paste0("y ~ ", paste0(mylist[[X]], collapse = " + "))
}
lapply(c(1:length(mylist)), mylistupdater)

问题是,我的真实列表有 1600 万个条目,这很慢。我觉得我写的 apply 函数很糟糕,像一个循环。它不应该处理索引,而是直接处理列表,对吧?但是我在网上看到的例子只是包含了一个简单的功能。如何使用这两个 paste0() 命令和更清晰的 lapply() 将参数传递给它?或者有没有data.table的解决方案?输出很可能是 data.table 中的一列。这次速度实际上很重要。

编辑:@akrun 和@Rui 在下面提供了很好的答案来解决我的问题。我现在可以奢侈地考虑速度,这是一场在我的机器上重复每个答案 100,000 次的赛马:

带有mylistupdater(mylist)的版本:时差1.072506秒

带有 lapply(mylist, reformulate, response = "y") 的版本:10.5461 秒的时间差

带有lapply(mylist, function(x) format(reformulate(x, "y")))的版本:时差18.20975秒

最佳答案

lapply 调用执行问题要求的操作。然后,将结果分配回回归列表或结果列表。

mylistupdater <- function(X, response = "y"){
lapply(X, function(x) {
x <- paste(x, collapse = " + ")
paste(response, x, sep = " ~ ")
})
}

mylistupdater(mylist)
#[[1]]
#[1] "y ~ a"
#
#[[2]]
#[1] "y ~ a + b"
#
#[[3]]
#[1] "y ~ a + b + c"

关于r - 向大型 (16Mill) 列表的所有元素添加一些字符串(可能是关于应用语法的问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58258577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com