【发布时间】:2023-03-03 10:32:01
【问题描述】:
我正在尝试在 for 循环中更改所有数据帧中的变量名称。数据的任何示例是:
df1 <- data.frame(
Number = c(45,62,27,34,37,55,40),
Day = c("Mon", "Tues", "Wed", "Thurs", "Fri", "Sat", "Sun"))
df2 <- data.frame(
Number = c(15,20,32,21,17,18,13),
Day = c("Mon", "Tues", "Wed", "Thurs", "Fri", "Sat", "Sun"))
df3 <- data.frame(
Number = c(12,32,22,14,16,21,30),
Day = c("Mon", "Tues", "Wed", "Thurs", "Fri", "Sat", "Sun")
L <- list(df1,df2,df3)
我目前的尝试是:
for(i in L){
colnames(L) <- c("NewName1", "NewName2")
}
哪个不起作用,我不明白为什么它不起作用。请让我知道是否有人可以指导我正确的方向。
【问题讨论】:
-
如果你的for循环是
for (i in L),那么你需要在循环内使用i。在这种情况下,您最好使用整数索引来循环:for(i in seq_along(L)){colnames(L[[i]]) = c("NewName1", "NewName2")}。 -
通常避免 for 循环,它们在 R 中比其他解决方案慢,例如下面 Jilber 答案中的 apply 函数。有关原因的一些信息,see here。
-
@Anonymouscoward:
apply并不比for loop快。 “apply函数在其定义中有一个 for 循环。lapply函数隐藏了循环,但执行时间往往大致等于显式for loop”(burns-stat.com/pages/Tutor/R_inferno.pdf)。是什么让for loop变慢并且占用内存的是循环中不断增长的对象。 -
@Tung,我们可能在这里陷入困境。
apply确实隐藏了一个for循环,但lapply没有,at least explicitly。
标签: r list for-loop dataframe iteration