Могу ли я вернуть только одно значение функции при использовании «apply»? - PullRequest
2 голосов
/ 09 апреля 2020

Я не знаком с apply в R. Когда я пытаюсь вернуть только одно значение функции, он не может его вернуть. Эта проблема может быть очень легко решена, но я не дохожу до нее.

Например, когда я пытаюсь использовать функцию sens.slope (Из пакета trend), она не вернется просто одна цифра c значение.

> e <- matrix(1:50, nrow = 5)
> apply(e,2, sens.slope$estimates)
Error in sens.slope$estimates : 
  object of type 'closure' is not subsettable 

Есть ли другое решение? Спасибо!

1 Ответ

4 голосов
/ 09 апреля 2020

apply нужна функция в качестве аргумента. sens.slope - это функция, но sens.slope$estimates - это не функция, это путает название функции с результатом. Обычный способ сделать это - создать анонимную функцию, которая возвращает только ту часть, которую вы хотите:

apply(e, 2, function(x) sens.slope(x)$estimates)
# [1] 1 1 1 1 1 1 1 1 1 1

Анонимная функция - это обычная функция, которую мы не пытаемся сохранить и назвать, потому что мы не ожидайте использовать это снова.

Мы могли бы поочередно написать это, как показано ниже, что было бы неплохо, если бы мы увидели потенциал для повторного использования этой функции. Вышеуказанный способ намного короче, если это разовая вещь.

sens.slope.est.only <- function(x) {
  slope <- sens.slope(x)
  est <- slope$estimates
  return(est)
}

apply(e, 2, sens.slope.est.only)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...