如何使R函数遍历两个列表

时间:2018-10-19 21:12:34

标签: r function

我有一个事件 A ,该事件在一系列抛掷中的大多数抛掷硬币出现时触发。我有一个不公平的硬币,我想看看 A 的可能性如何随着掷球次数的变化以及每次掷球的概率的变化而变化。

这是我的功能,假设要扔3次

def aggregate(s):
    u = s[s.notnull()].unique()
    if not u.size: return np.nan
    return u

df.groupby('objectID').agg(aggregate)

                grade   OS      method
objectID            
object_id_0001  AAA     Mac     organic
object_id_0002  ABC     Win     NaN

我希望$env:BUILD_BUILDNUMBER函数可以:

  1. 在给定特定值p的情况下,找出大多数被抛弃的情况下每种结果的概率
  2. 总结这些概率并将其添加到向量z
  3. 返回并以另一种概率p做相同的事情

我用$(...)n <- 3 #victory requires majority of tosses heads #tosses only occur in odd intervals k <- seq(n/2+.5,n) victory <- function(n,k,p){ for (i in p) { x <- 0 for (i in k) { x <- x + choose(n, k) * p^k * (1-p)^(n-k) } z <- x } return(z) } p <- seq(0,1,.1) victory(n,k,p) 测试了此结果,输出为0.75000、0.84375。我知道输出应该是0.625、0.0984375。

1 个答案:

答案 0 :(得分:0)

我无法完全获得所需的结果,但也许可以帮助您。

在R中循环时,要循环的向量保持不变,并且用于循环更改的值。例如,查看这些循环中的差异:

test <- seq(0,1,length.out = 5)

for ( i in test){
  print(test)
}

for ( i in test){
  print(i)
}

for ( i in 1:length(test)){
  print(test[i])
}

进行迭代时,首先将i设置为p中的第一个数字,然后将其设置为k中的第一个数字,然后使用不变的向量。

您还要在p的第一个循环中将z赋值,然后在第二个循环中将其覆盖。

尝试使用以下内容-我仍然没有得到您说的答案,但是它可能会帮助您找到错误的位置(沿途打印或使用debug(victory)可能也会有帮助

victory <- function(n,k,p){
  z <-list()
  for (i in 1:length(p)) {
    x <- 0
    for (j in 1:length(k)) {
      x <- x + choose(n, k[j]) * p[i]^k[j] * (1-p[i])^(n-k[j])
    } 
    z[i] <- x
  } 
  return(z)
}