迭代向量的笛卡尔积
发布时间:2020-05-24 22:26:41 所属栏目:Java 来源:互联网
导读:我有以下嵌套循环: for (x in xs) { for (y in ys) { # Do something with x and y }} 我想要展平所以我想要构建两个向量xs和ys的笛卡尔乘积并迭代结果.在Python中,这将是微不足道的: for xy in product(xs, ys): # x, y = xy[0], xy[1] 但在R中,
我有以下嵌套循环: for (x in xs) { for (y in ys) { # Do something with x and y } } 我想要展平所以我想要构建两个向量xs和ys的笛卡尔乘积并迭代结果.在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函数将函数应用于数据框的每一行.只需将“您的功能”替换为您的实际功能即可.# example data xs <- rnorm(10) ys <- rnorm(10) apply(expand.grid(xs,ys),1,FUN = function(x) {"your function"}) 这是一个非常基本的例子.在这里,计算一行中两个值的总和: apply(expand.grid(xs,FUN = function(x) {x[1] + x[2]}) 这是一个使用命名参数(xs,ys)而不是索引(x [1],x [2])的变体: myfun <- function(xs,ys) xs + ys arguments <- expand.grid(xs = rnorm(10),ys = rnorm(10)) apply(arguments,function(x)do.call(myfun,as.list(x))) (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |