在R中构造带有names()和lapply()的简单函数到列表中

时间:2015-07-23 08:56:48

标签: r list function loops lapply

我试图将我的想法更多地转换为应用lapply或函数而不是连续循环。在这里,我有一个在循环中很好地运行的代码 - 目标很简单:为列表的每个元素中的每个列赋予名称。我希望将其转换为函数,但我无法使其正常工作。

data1 <- data.frame(rnorm(10),rnorm(10),rnorm(10))
data2 <- data.frame(rnorm(10),rnorm(10),rnorm(10))
data3 <- data.frame(rnorm(10),rnorm(10),rnorm(10))

data <- list(data1,data2,data3)



for (i in 1:length(data)) {
        names(data[[i]]) <- c("x", "y", "r")
}

这是我弄错的地方:

lapply(data, function(x) names(x) <-  c("x", "y", "f"))

这个功能对我来说也不起作用:

givenames <- function (x) {
        names(x) <-  c("x", "y", "f")
}

lapply(data,givenames)

1 个答案:

答案 0 :(得分:2)

好主动!

在你的功能中,你几乎就在那里。事实上,你没有返回data.frame,你应该这样做:

lapply(data, function(x) {names(x) <-  c("x", "y", "f"); x})

与以下内容相同:

lapply(data, function(x) {
    names(x) <-  c("x", "y", "f")
    x
})

这是一个简洁的解决方案:

lapply(data, setNames, c('x','y','f'))

请注意,setNames会返回a data.frame,这是其有效的原因。