在mapply中打印的奇怪行为

时间:2017-08-17 23:14:45

标签: r printf mapply

print()作为包含在mapply()中的函数的副作用时,我看到了一些意想不到的行为(无论如何)。

例如,这可以按预期工作(是的,我知道这不是我们添加向量的方式):

mapply(function(i,j) i+j, i=1:3, j=4:6) # returns [1] 5 7 9

这样做:

mapply(function(i,j) paste(i, "plus", j, "equals", i+j), i=1:3, j=4:6) 
# returns [1] "1 plus 4 equals 5" "2 plus 5 equals 7" "3 plus 6 equals 9"

但这不是:

mapply(function(i,j) print(paste(i, "plus", j, "equals", i+j)), i=1:3, j=4:6)
# returns:
# [1] "1 plus 4 equals 5"
# [1] "2 plus 5 equals 7"
# [1] "3 plus 6 equals 9"
# [1] "1 plus 4 equals 5" "2 plus 5 equals 7" "3 plus 6 equals 9"

这里发生了什么?我有一段时间没有使用过mapply(),所以也许这很简单......我使用的是R版本3.4.0。

1 个答案:

答案 0 :(得分:4)

print都打印其参数并返回其值。

p <- print("abc")
# [1] "abc"
p
# [2] "abc"

因此每个元素都被打印出来,然后返回(并打印)了东西的向量。尝试例如invisible(mapply(...))m <- mapply(...)进行比较。

FWIW cat()返回NULL ...