对R中函数的误解

时间:2017-10-04 20:30:56

标签: r function sum

我有一个载体

p <- seq(0,1,length=11)

我想在求和中使用它作为自变量

enter image description here

如果我制作一个用手编码求和的函数

f <- function(a){
a^0*(1-a)^5+a^1*(1-a)^4+...
}

并传递p,然后我得到正确的输出并且不会抛出任何错误

results <- f(p)

我可以绘制它,results是正确的长度,一切都是犹太洁食。它只是看起来很难看,所以我想改用sum()并尝试

i <- 0:5    
g <- function(a,i){
    sum(a^i*(1-a)^(5-i))
}

但是当我尝试g(p,i)时,它会抛出错误

longer object length is not a multiple of shorter object length

我相信我收到此错误的原因得到了很好的回答over here,特别是有关回收的部分。 sum同时在i向量和p之间循环,然后在p[7]i[1]到达i时结束{1}}。然而,我的问题是将f简化为g的正确方法是什么?

3 个答案:

答案 0 :(得分:3)

我会做这样的事情,

p <- seq(0,1,length=11)
i <- 0:5
g <- function(a,i){
  a^i*(1-a)^(5-i)
}

plot(p, rowSums(outer(X = p, Y = i, FUN = g)))

要回答你的问题,我认为没有一种正确的方式来做到这一点;更实用的方法可能是

Reduce(function(s, x) s + g(p, x), x = 0:5, init=0)

但它可能效率较低,而且可读性较差。

答案 1 :(得分:2)

也许试试这个:

var newarray = [];
$.each(array["#VER"], function(i, item) {
if (condition for subarray) {
    newarray.push(i,item);  
} 
});

答案 2 :(得分:2)

您想要计算的函数不会相对于p自然地进行矢量化。 sapply是在矢量上映射非矢量化函数的自然选择:

f <- function(x){
  i <- 0:5
  sum(x^i*(1-x)^(5-i))
}

p <- seq(0,1,length=11)

sums <- sapply(p,f)
> sums
 [1] 1.0000 0.6643 0.4368 0.2923 0.2128 0.1875 0.2128
 [8] 0.2923 0.4368 0.6643 1.0000