在应用函数系列中,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()对上述向量求和?非常感谢。
答案 0 :(得分:3)
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
应用于列表中的每个向量
答案 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