对多个向量使用 mapply 但每个元素只使用一次

Use mapply for multiple vectors but only once for each element

我尝试遍历多个向量,例如 Python“for x, y, z in zip(lia, lib, lic): ...”,发现 mapply 可以满足我的要求,但它returns太多了。

示例:

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"

前三行是我所期望的。为什么它返回更多? 我该怎么做才正确?

当你使用 print 时,mapply 仍然有它自己的输出,你可以制作 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"