在 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
,它起作用的原因。
我正在尝试将我的想法更多地转换为应用 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
,它起作用的原因。