lapply中的匿名函数

时间:2017-05-11 06:26:37

标签: r lapply

我正在阅读Wickham的高级R书。这个问题与解决第12章 - 功能问题5有关。演习要求我们:

  

实施一个lapply()版本,为每个组件的名称和值提供FUN。

现在,当我在代码下面运行时,我会得到一个专栏的预期答案。

c(class(iris[1]),names(iris[1]))

输出是:

"data.frame"   "Sepal.Length"

基于上面的代码,这就是我所做的:

lapply(iris,function(x){c(class(x),names(x))})

但是,我只从class(x)而不是names(x)获得输出。为什么会这样?

我还尝试paste()看看它是否有效。

lapply(iris,function(x){paste(class(x),names(x),sep = " ")})

我只在输出中得到class(x)。我没有看到names(x)被退回。

为什么会这样?另外,我该如何解决?

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:3)

不是直接遍历数据框,而是可以切换周围的事情,并重新检查列名称的向量,

data(iris)

lapply(colnames(iris), function(x) c(class(iris[[x]]), x))

或列的索引,引用数据框。

lapply(1:ncol(iris), function(x) c(class(iris[[x]]), names(iris[x])))

注意使用单方括号和双方括号 iris[[n]]引用列表n中的iris对象的值(数据框只是一种特殊的列表),剥离所有属性,制作类似mean(iris[[1]])的内容可能的。
iris[n]引用n个对象本身,所有属性都保持不变,使names(iris[1])成为可能。