簡體   English   中英

從list()遍歷鍵/值對

[英]Iterate over key/value pair from a list()

我想知道如何從R中的列表對象遍歷鍵/值對,如下面的示例:

toto <- list(a="my name is",b="I'm called",c="name:")
myfun <- function(key,value) paste(value,key)
for( key in names(toto) ) toto[key] <- myfun(key,toto[[key]])

有沒有一種方法可以避免for循環(使用lapply()等)。 會更快嗎?

謝謝!

最好的解決方案是直接調用paste而無需循環(它已經向量化):

> paste(toto, names(toto))
[1] "my name is a" "I'm called b" "name: c"  

先前在R-Help上提出了類似的問題,並提供了一些創造性的解決方案。 lapply無法顯示函數中的名稱。 此功能由Romain Francois根據Thomas Lumley提供的內容提供:

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" 

這應該為您做:

do.call(paste, list(toto, names(toto) ))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM