gpt4 book ai didi

r - 迭代向量的笛卡尔积

转载 作者:行者123 更新时间:2023-12-04 13:14:07 24 4
gpt4 key购买 nike

我有以下嵌套循环:

for (x in xs) {
for (y in ys) {
# Do something with x and y
}
}

我想将其展平,因此我想到了构建两个向量 xsys的笛卡尔积,并对结果进行迭代。在Python中,这很简单:

for xy in product(xs, ys):
# x, y = xy[0], xy[1]

但是在R中,我发现的最简单的等效项看起来令人生畏:
xys <- expand.grid(xs, ys)
for (i in 1 : nrow(xys)) {
xy <- as.vector(xys[i, ])
# x <- xy[1], y <- xy[2]
}

当然必须有更好的方法,不是吗? (为澄清起见,我不想遍历索引...我认为必须有一种直接遍历产品中元组的方法。)

最佳答案

您可以使用apply函数将一个函数应用于数据框的每一行。只需将"your function"替换为您的实际功能即可。

# example data
xs <- rnorm(10)
ys <- rnorm(10)

apply(expand.grid(xs, ys), 1, FUN = function(x) {"your function"})

这是一个非常基本的例子。此处,计算一行中两个值的总和:
apply(expand.grid(xs, ys), 1, FUN = function(x) {x[1] + x[2]})

这是一个使用命名参数( xsys)而不是索引( x[1]x[2])的变体:
myfun <- function(xs, ys) xs + ys
arguments <- expand.grid(xs = rnorm(10), ys = rnorm(10))
apply(arguments, 1, function(x)do.call(myfun, as.list(x)))

关于r - 迭代向量的笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12338092/

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