我试图将我的想法更多地转换为应用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)
答案 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
,这是其有效的原因。