gpt4 book ai didi

r - 对每个列组合应用函数

转载 作者:行者123 更新时间:2023-12-02 02:50:22 25 4
gpt4 key购买 nike

我有一个带有 n 的数据框列,并希望对每个列组合应用一个函数。这与 cor() 的方式非常相似。函数将数据帧作为输入并生成相关矩阵作为输出,例如:

X <- data.frame(A=rnorm(100), B=rnorm(100), C=rnorm(100))
cor(X)

这将生成此输出:
> cor(X)
A B C
A 1.00000000 -0.01199511 0.02337429
B -0.01199511 1.00000000 0.07918920
C 0.02337429 0.07918920 1.00000000

但是,我有一个自定义函数,需要将其应用于每个列组合。我现在正在使用使用嵌套 for 循环的解决方案,该解决方案有效:
f <- function(x, y) sum((x+y)^2) # some placeholder function

out <- matrix(NA, ncol = ncol(X), nrow = ncol(X)) # pre-allocate
for(i in seq_along(X)) {
for(j in seq_along(X)) {
out[i, j] <- f(X[, i], X[, j]) # apply f() to each combination
}
}

其中产生:
> out
[,1] [,2] [,3]
[1,] 422.4447 207.0833 211.4198
[2,] 207.0833 409.1242 218.2430
[3,] 211.4198 218.2430 397.5321

我目前正在尝试过渡到 tidyverse,并且希望避免使用 for 循环。 有人可以向我展示这种情况的整洁解决方案吗? 谢谢!

最佳答案

你可以做

library(tidyverse)
f <- function(x, y) sum((x+y)^2)
X <- data.frame(A=rnorm(100), B=rnorm(100), C=rnorm(100))

as.list(X) %>%
expand.grid(., .) %>%
mutate(out = map2_dbl(Var1, Var2, f)) %>%
as_tibble()

关于r - 对每个列组合应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52500031/

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