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)
不起作用。
答案 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