KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
As a guideline I prefer apply functions on elements of a list using lapply or *ply (from plyr) rather than explicitly iterating through them. However, this works well when I have to process one list at a time. When the function takes multiple arguments, I usually do a cycle. I was wondering if it's possible to have a cleaner construct, still functional in nature. One possible approach could be to define a function similar to Python, zip(x,y), which takes the input lists, and returns a list, whose i-th element is list(x, y), and then apply the function to this list. But my question is whether I am using the cleanest approach or not. I am not worried about performance optimization, but rather clarity/elegance. Below is the naive example. A <- as.list(0:9) B <- as.list(0:9) f <- function(x, y) x^2+y OUT <- list() for (n in 1:10) OUT[[n]] <- f(A[[n]], B[[n]]) OUT [[1]] [1] 0 [[2]] [1] 2 ... And here is the zipped example (which could be extended to arbitrary arguments): zip <- function(x, y){ stopifnot(length(x)==length(y)) z <- list() for (i in seq_along(x)){ z[[i]] <- list(x[[i]], y[[i]]) } z } E <- zip(A, B) lapply(E, function(x) f(x[[1]], x[[2]])) [[1]] [1] 0 [[2]] [1] 2 ...
Tags (comma-separated)
Save Edits
Cancel