mapply 中 print 的奇怪行为
odd behavior of print within 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。
print
都打印它的参数和 returns 它的值。
p <- print("abc")
# [1] "abc"
p
# [2] "abc"
所以每个元素都被打印出来,然后东西的向量被返回(并打印出来)。尝试例如invisible(mapply(...))
或 m <- mapply(...)
进行比较。
FWIW cat()
returns NULL
...
当 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。
print
都打印它的参数和 returns 它的值。
p <- print("abc")
# [1] "abc"
p
# [2] "abc"
所以每个元素都被打印出来,然后东西的向量被返回(并打印出来)。尝试例如invisible(mapply(...))
或 m <- mapply(...)
进行比较。
FWIW cat()
returns NULL
...