我正在阅读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)
被退回。
为什么会这样?另外,我该如何解决?
有人可以帮帮我吗?
答案 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])
成为可能。