首页 > 解决方案 > 对多个向量使用 mapply,但每个元素只使用一次

问题描述

我尝试迭代多个向量,例如 Pythons “for x, y, z in zip(lia, lib, lic): ...”,并找到mapply了我想要的,但它返回太多。

例子:

lia = c(1,2,3)
lib = c(4,5,6)
lic = c(7,8,9)
mapply(function(x, y, z) print(sprintf('%f %f %f', x, y, z)), lia, lib, lic )

结果是:

[1] "1.000000 4.000000 7.000000"
[1] "2.000000 5.000000 8.000000"
[1] "3.000000 6.000000 9.000000"
[[1]]
[1] "1.000000 4.000000 7.000000"

[[2]]
[1] "2.000000 5.000000 8.000000"

[[3]]
[1] "3.000000 6.000000 9.000000"

前三行是我所期望的。为什么它返回更多?我将如何正确地做到这一点?

标签: rmapply

解决方案


当您使用时printmapply仍然有您可以制作的自己的输出invisible。但是,也许您根本不需要print

尝试以下两种方法之一:

invisible(mapply(function(x, y, z) print(sprintf('%f %f %f', x, y, z)), lia, lib, lic))
# [1] "1.000000 4.000000 7.000000"
# [1] "2.000000 5.000000 8.000000"
# [1] "3.000000 6.000000 9.000000"

mapply(function(x, y, z) sprintf('%f %f %f', x, y, z), lia, lib, lic)
# [1] "1.000000 4.000000 7.000000" "2.000000 5.000000 8.000000" "3.000000 6.000000 9.000000"

推荐阅读