我有以下嵌套循环:
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)))
原文地址:https://www.jb51.cc/java/127784.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。