r - 从list()遍历键/值对

标签 r

我想知道如何从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"  


一个类似的问题previously asked on 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" 

关于r - 从list()遍历键/值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4500106/

相关文章:

从 CRAN 安装软件包时 R 找不到 Rtools

r - 如何更改 ggplot2 密度图中的颜色?

使用包 httr、twitteR 和 streamR 检索缓存的 oauth token

r - R中Purrr包中Map()和map()的区别

r - 访问 R Dataframe 值而不是 Tibble

R - 如何将一个函数作为参数传递给另一个函数?

r - 合并并平均列表中的每 15 个 data.frames

r - 为 geom_col 添加渐变填充

使用 R 检索期刊论文的引用

r - 将部分变量与名称中的数字组合起来