Your lapply
is a bit off. You need to pass in a function. Right now you are attempting to call mismatch.i(x)
and x
isn’t defined anywhere. Plus you defined mismatch.i
to have additional parameters that you are not passing. It should look like
diff.mat = do.call(rbind, lapply(1:nrow(R), function(x) mismatch.i(D, R, x, threshold)))
Here we clearly make a function that lapply
can call and pass the value of x
to the i=
parameter and pass along the result of the values.
Since it is a nested function, you could also leave out the redundant parmaters from the inner function (since they will never change) So you could do
mis.test = function(D, R, threshold) {
D = as.data.frame(D)
R = as.data.frame(R)
mismatch.i = function(i) {
dif = purrr::map2_df(D[-1], R[i,-1], `-`)
dif[dif<0] = 0
dif$mismatch=rowSums(dif)
dif = cbind(ID = D[1],R[i,1], dif)
dif = dif[which(dif$mismatch <= threshold),]
return(list=dif[c(1,2,ncol(dif))])
}
diff.mat = do.call(rbind, lapply(1:nrow(R), function(x) mismatch.i(x)))
diff.mat = as.data.frame(diff.mat)
return(diff.mat)
}
CLICK HERE to find out more related problems solutions.