R,sapply似乎未应用所提供的功能

时间:2019-05-09 21:25:08

标签: r

在应用函数系列中,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 个答案:

答案 0 :(得分:3)

sapply将函数应用于列表的每个元素。因此,您在这里所做的就是将sum单独应用于每个数字-这并不能完成任何事情。您可以看到此示例中发生的事情:

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

只有在您要对列表的多个元素求和时,才将sumapply一起使用才有意义:

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

在这里,sum应用于列表中的每个向量

答案 1 :(得分:2)

如果必须使用sapply,请尝试

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

函数sapply将函数sum应用于每个元素。因此,对于向量v,它是对每个单独的元素求和。

很明显,一个元素的总和就是那个元素。

我们使用list函数,将sum函数应用于列表的第一个元素v,从而获得所需的结果。

为理解起见,我们可以使用任何函数将向量“向下移动”,例如data.frame

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

但是对于您而言,不需要sapply

答案 2 :(得分:0)

在这种情况下,您将使用reduce功能

    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