функция sapply, возвращающая нулевые значения - PullRequest
1 голос
/ 03 мая 2020

Я изучаю основы c R-программирования и выполняю это упражнение, ставящее мне вопрос: я запускаю следующий код, но не могу понять причину возврата значений NULL.

temp <- list(c(3,7,9,6,-1),
         c(6,9,12,13,5),
         c(4,8,3,-1,-3),
         c(1,4,7,2,-2),
         c(5,7,9,4,2),
         c(-3,5,8,9,4),
         c(3,6,9,4,1))

print_info <- function(x) {
  cat("The average temperature is", mean(x), "\n")
}

sapply(temp, print_info)

The average temperature is 4.8 
The average temperature is 9 
The average temperature is 2.2 
The average temperature is 2.4 
The average temperature is 5.4 
The average temperature is 4.6 
The average temperature is 4.6 
NULL
NULL
NULL
NULL
NULL
NULL
NULL

Можете ли вы помочь понять, почему я получаю значения NULL?

Спасибо:)

Ответы [ 2 ]

3 голосов
/ 03 мая 2020

Это вывод функции cat:

x = cat('hi\n')
# hi
print(x)
# NULL
0 голосов
/ 03 мая 2020

Каждая функция должна что-то возвращать. Как продемонстрировал @MichaelChirico, cat печатает вывод в консоли и возвращает NULL, эти NULL возвращаются как выходные данные из функции print_info.

Вместо использования cat или print в функции вы можете использовать paste / paste0

print_info <- function(x) {
  paste0("\nThe average temperature is ", mean(x))
}

cat(sapply(temp, print_info))

#The average temperature is 4.8 
#The average temperature is 9 
#The average temperature is 2.2 
#The average temperature is 2.4 
#The average temperature is 5.4 
#The average temperature is 4.6 
#The average temperature is 4.6
...