Rory Winston wrote: > I have got it to work in a fairly non-elegant manner, using the following code: > > sum ( unlist(lapply(strsplit("TESTING",""), function(x) match(x,LETTERS) )) ) > > And over a list of names, this becomes: > > lapply(namelist, function(Z) { sum ( unlist(lapply(strsplit(Z,""), function(x) match(x,LETTERS) )) ) } ) > > But this is kind of ugly.... > > Rory Winston > RBS Global Banking & Markets > Office: +44 20 7085 4476
Do you mean that the nested lapply's are kind of ugly. You don't need them. I think the following does the same as what you wrote f1 <- function(namelist)lapply(strsplit(namelist,""), function(x) sum(match(x,LETTERS))) where your code as a function would be f0 <- function(namelist)lapply(namelist, function(Z) { sum ( unlist(lapply(strsplit(Z,""), function(x) match(x,LETTERS) )) ) } ) (Since f0() and f1() return lists of scalar integers, it might make more sense to call unlist() on their outputs before returning them.) Another approach is to use a named vector of character values to map characters to values, such as in f2 <- function(namelist) { values <- c(seq_along(LETTERS), seq_along(letters), 0L, 0L, 0L) names(values) <- c(LETTERS, letters, " ", "-", ".") lapply(strsplit(namelist,""), function(characters, values)sum(values[characters]), values) } E.g., > f2(c("Mary Jean", "Maryjean", "Mary-Jean", "MARYJEAN")) [[1]] [1] 87 [[2]] [1] 87 [[3]] [1] 87 [[4]] [1] 87 That approach lets you map several characters to the same value, and the values are not restricted to the small positive integers 1:length(possibleCharacters). Bill Dunlap TIBCO Software Inc - Spotfire Division wdunlap tibco.com ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.