R, sapply, кажется, не применяет предоставленную функцию - PullRequest
0 голосов
/ 10 мая 2019

Рассматривая семейство функций apply, sapply не производит то, что я хотел бы.Проблема, которую я упростил до базового примера ниже.Я создаю вектор, а затем выполняю операцию суммирования.

1.
v<-c(1:9)
sum(v)
#this returns 45 as expected

2.
sapply (v, sum)
#this returns [1] 1 2 3 4 5 6 7 8 9

Как использовать sapply () для суммирования вектора выше?Большое спасибо.

Ответы [ 3 ]

3 голосов
/ 10 мая 2019

sapply применяет функцию к каждому элементу списка. Итак, что вы делаете здесь, это применяете sum к каждому номеру самостоятельно - что ничего не дает. Вы можете увидеть, что происходит в этом примере:

sapply(1:9, function(x) x + 1)
[1]  2  3  4  5  6  7  8  9 10

Использование sum с apply имеет смысл, только если вы хотите суммировать несколько элементов списка:

sapply(list(1:9, 3:4), sum)
[1] 45  7

Здесь sum применяется к каждому вектору в списке

2 голосов
/ 10 мая 2019

Если вы должны использовать sapply, попробуйте,

sapply (list(v), sum)
[1] 45

Функция sapply применяет функцию sum к каждому элементу. Таким образом, для вектора v он суммировал каждый отдельный элемент.

Ясно, что сумма этого элемента равна сумме одного элемента.

Используя функцию list, мы применяем функцию sum к первому элементу списка, который является v, давая желаемый результат.

Просто для понимания, мы можем использовать любую функцию для перемещения вектора «вниз по уровню», например data.frame,

> sapply(data.frame(v), sum)[[1]]
[1] 45

Но в вашем случае нет необходимости sapply.

0 голосов
/ 10 мая 2019

в этом случае вы используете функцию приведения

    v<-c(1:9)
    sum(v)
    #this returns 45 as expected

    purrr::reduce(v,sum)
    #this also returns 45

    # or base R
    Reduce(sum,v)
    # this also returns 45
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...