Странное поведение печати в 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 ответ
Решение
print
оба выводят свой аргумент и возвращают его значение.
p <- print("abc")
# [1] "abc"
p
# [2] "abc"
Таким образом, каждый элемент печатается, а затем возвращается вектор материала (и печатается). Попробуйте например invisible(mapply(...))
или же m <- mapply(...)
для сравнения.
FWIW cat()
возвращается NULL
...