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

4

2 回答 2

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
于 2013-08-12T07:39:46.183 回答
2

与@Roland 的回答类似,我只需执行 apply on 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)

如果您只想保留标签,可以使用llplyfrom plyrpackage。

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
于 2013-08-12T08:01:44.050 回答