如何使用lapply检索传递给函数的列表的名称

时间:2013-08-12 07:12:46

标签: r lapply

Z = data.frame(var1 = c(1,2,3,4,5), var2 = LETTERS[1:5])

testfun <- function(x){
  print(x) # prints the data
  # but how to get names of the list coming in?
  return(NULL)
}

res = lapply(Z, testfun)

我想在testfun中访问变量“var1”和“var2”。如何在testfun中检索这些变量? lapply甚至传递了这些信息? colnames(x)不起作用。

2 个答案:

答案 0 :(得分:3)

不,lapply不会将此信息传递给该函数。您可以lapply沿着名称使用子集来获取函数内的列表内容。

testfun <- function(nam, mylist){
  print(nam) # prints the names
  mylist[[nam]] #get list content using subsetting
}

res <- lapply(names(Z), testfun, mylist=Z)
# [1] "var1"
# [1] "var2"

res
# [[1]]
# [1] 1 2 3 4 5
# 
# [[2]]
# [1] A B C D E
# Levels: A B C D E

答案 1 :(得分:2)

与@ Roland的答案类似,我只是对1:length(Z)进行申请,并将列表和列表名称传递给该函数。

nams <- names(Z)
testfun <- function(i,Z,nams){
print(Z[[i]])
print(nams[i])}

res <- lapply(1:length(Z),testfun,Z=Z,nams=nams)

如果您只想保留标签,可以使用llply包中的plyr

testfun <- function(x){x}
res <- llply(Z,testfun)
res

结果将是:

> res
$var1
[1] 1 2 3 4 5

$var2
[1] A B C D E
Levels: A B C D E