迭代向量的笛卡尔积

前端之家收集整理的这篇文章主要介绍了迭代向量的笛卡尔积前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下嵌套循环:
  1. for (x in xs) {
  2. for (y in ys) {
  3. # Do something with x and y
  4. }
  5. }

我想要展平所以我想要构建两个向量xs和ys的笛卡尔乘积并迭代结果.在Python中,这将是微不足道的:

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

但在R中,我发现的最简单的等价物看起来令人生畏:

  1. xys <- expand.grid(xs,ys)
  2. for (i in 1 : nrow(xys)) {
  3. xy <- as.vector(xys[i,])
  4. # x <- xy[1],y <- xy[2]
  5. }

当然必须有更好的方法,不是吗? (为了澄清,我不想迭代索引……我认为必须有一种方法可以直接迭代产品中的元组.)

解决方法

您可以使用apply函数函数应用于数据框的每一行.只需将“您的功能”替换为您的实际功能即可.
  1. # example data
  2. xs <- rnorm(10)
  3. ys <- rnorm(10)
  4.  
  5. apply(expand.grid(xs,ys),1,FUN = function(x) {"your function"})

这是一个非常基本的例子.在这里,计算一行中两个值的总和:

  1. apply(expand.grid(xs,FUN = function(x) {x[1] + x[2]})

这是一个使用命名参数(xs,ys)而不是索引(x [1],x [2])的变体:

  1. myfun <- function(xs,ys) xs + ys
  2. arguments <- expand.grid(xs = rnorm(10),ys = rnorm(10))
  3. apply(arguments,function(x)do.call(myfun,as.list(x)))

猜你在找的Java相关文章