Лучшее решение из всех - просто позвонить paste
напрямую без цикла (он уже векторизован):
> paste(toto, names(toto))
[1] "my name is a" "I'm called b" "name: c"
Аналогичный вопрос , ранее заданный в R-Help ,с несколькими творческими решениями.lapply
не может отображать имена внутри функции.Эта функция была предоставлена Романом Франсуа на основе чего-то Томаса Ламли:
yapply <- function(X,FUN, ...) {
index <- seq(length.out=length(X))
namesX <- names(X)
if(is.null(namesX))
namesX <- rep(NA,length(X))
FUN <- match.fun(FUN)
fnames <- names(formals(FUN))
if( ! "INDEX" %in% fnames ){
formals(FUN) <- append( formals(FUN), alist(INDEX=) )
}
if( ! "NAMES" %in% fnames ){
formals(FUN) <- append( formals(FUN), alist(NAMES=) )
}
mapply(FUN,X,INDEX=index, NAMES=namesX,MoreArgs=list(...))
}
Вот пример использования:
> yapply(toto, function( x ) paste(x, NAMES) )
a b c
"my name is a" "I'm called b" "name: c"