如何将重复函数的输出绑定到 df - 矢量化
How to rbind output of repeated function to a df - vectorized
我到处都在读到你不应该在 R 中使用 for 循环,而应该这样做 'vectorized'。然而,我发现 for 循环很直观,并且很难转换我的代码。
我有一个要多次使用的函数 f1。该函数的输入位于名为 l1 的列表中。我的 f1 输出一个 df。我想将这些输出 dfs 绑定到一个 df 中。我现在的 for 循环是这样的:
z3 <- data.frame()
for(i in l1) {
z3 <- rbind(z3, f1(i))
}
谁能帮我做同样的事情,但没有 for 循环?
您可以使用 lapply()
和 do.call()
do.call(rbind, lapply(l1, f1))
另一种更详细的方法:
## function that returns a 1 x 2 dataframe:
get_fresh_straw <- function(x) data.frame(col1 = x, col2 = x * pi)
l1 = list(A = 1, B = 5, C = 2)
Reduce(l1,
f = function(camel_back, list_item){
rbind(camel_back, get_fresh_straw(list_item))
},
init = data.frame(col1 = NULL, col2 = NULL)
)
我到处都在读到你不应该在 R 中使用 for 循环,而应该这样做 'vectorized'。然而,我发现 for 循环很直观,并且很难转换我的代码。
我有一个要多次使用的函数 f1。该函数的输入位于名为 l1 的列表中。我的 f1 输出一个 df。我想将这些输出 dfs 绑定到一个 df 中。我现在的 for 循环是这样的:
z3 <- data.frame()
for(i in l1) {
z3 <- rbind(z3, f1(i))
}
谁能帮我做同样的事情,但没有 for 循环?
您可以使用 lapply()
和 do.call()
do.call(rbind, lapply(l1, f1))
另一种更详细的方法:
## function that returns a 1 x 2 dataframe:
get_fresh_straw <- function(x) data.frame(col1 = x, col2 = x * pi)
l1 = list(A = 1, B = 5, C = 2)
Reduce(l1,
f = function(camel_back, list_item){
rbind(camel_back, get_fresh_straw(list_item))
},
init = data.frame(col1 = NULL, col2 = NULL)
)