在 R 中使用 names() 和 lapply() 构造简单函数到列表

Constructing simple function in R with names() and lapply() to a list

我正在尝试将我的想法更多地转换为应用 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)

好倡议!

在你的职能中,你几乎就在那里。事实上你并没有返回 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 returns a data.frame,它起作用的原因。