title: How to loop function through list of vectors
body: <p>I have a list called <code>x</code> containing 8 vectors of different lengths, which I randomly generated like so:</p>
  
  <pre><code>set.seed(1852020)
  
  # specify how many vectors I want
  N &lt;- c(1:8)
  
  # set up output
  x &lt;- vector("list", length(N))
  
  # loop to generate binomial vectors of a random length between 1 and 50
  for (i in N) {
    n &lt;- sample(50, 1, replace = TRUE)
    x[[i]] &lt;- rbinom(n, 1, .66)
  }
  
  x
  [[1]]
  [1] 1 1 1 1 1
  
  [[2]]
   [1] 1 1 1 0 0 1 1 0 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 0 1 0 0 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 1 0 0 1 1 1
  
  [[3]]
   [1] 0 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 1 0 1 0 1 0 1
  
  [[4]]
  [1] 1 1
  
  [[5]]
   [1] 1 1 1 1 0 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 1 1 1 1 0 1 1 0 1 1
  
  [[6]]
   [1] 0 1 1 1 1 0 0 1 1 1 1 1 0 1 1
  
  [[7]]
  [1] 1 1 1 1
  
  [[8]]
   [1] 1 1 1 0 0 0 1 1 1 0 0 1 0
  </code></pre>
  
  <p>I now want to feed each vector through a function I have written called <code>learn</code>: </p>
  
  <pre><code>learn &lt;- function(prior, e){
    out &lt;- ifelse(is.na(e), prior,
                  ifelse(e == 1, (0.6*prior) / ((0.6*prior) + (1-0.6)*(1-prior)),
                         ((1-0.6)*prior) / (((1-0.6)*prior) + (0.6*(1-prior)))))
    out
  }
  </code></pre>
  
  <p>How can I do this so that the <code>prior</code> argument of my function updates between each value from <code>x</code> is fed through as the <code>e</code> argument? For example, if I start with a <code>prior</code> of 0.5 and feed through <code>x[[4]]</code>, it should do this:</p>
  
  <pre><code>&gt; learn(0.5, 1)
  [1] 0.6
  &gt; learn(0.6, 1)
  [1] 0.6923077
  </code></pre>
  
  <p>My desired output would be a vector of 8 values corresponding to the 8 vectors contained in list <code>x</code>.</p>
  
  <hr>
  
  <p>If it is helpful, <code>x</code> can be turned into a dataframe like so:</p>
  
  <pre><code>f &lt;- function(data) {
    nCol &lt;- max(vapply(data, length, 0))
    data &lt;- lapply(data, function(row) c(row, rep(NA, nCol-length(row))))
    data &lt;- matrix(unlist(data), nrow=length(data), ncol=nCol, byrow=TRUE)
    data.frame(data)
  }
  
  x &lt;- f(x)
  
  &gt; x
    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31 X32 X33 X34 X35 X36 X37 X38 X39 X40 X41 X42 X43 X44 X45 X46 X47 X48
  1  1  1  1  1  1 NA NA NA NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
  2  1  1  1  0  0  1  1  0  1   0   1   0   1   1   1   1   1   1   1   1   0   1   1   0   1   0   0   1   0   1   0   0   0   0   0   1   0   0   1   0   1   0   1   0   0   1   1   1
  3  0  1  1  0  0  1  0  1  1   1   1   1   1   1   1   0   1   0   1   1   0   1   0   1   0   1  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
  4  1  1 NA NA NA NA NA NA NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
  5  1  1  1  1  0  0  0  1  1   0   1   1   0   0   1   1   0   1   1   0   1   1   1   1   0   1   1   0   1   1  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
  6  0  1  1  1  1  0  0  1  1   1   1   1   0   1   1  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
  7  1  1  1  1 NA NA NA NA NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
  8  1  1  1  0  0  0  1  1  1   0   0   1   0  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
  </code></pre>