使用 assign() 在 R 中循环重命名变量
Loop rename variables in R with assign()
我正在尝试在多个数据帧上重命名一个变量,但赋值不起作用。这是我正在尝试的代码
assign(colnames(eval(as.name(DataFrameX)))[[3]], "<- NewName")
# The idea is, go through every dataset, and change the name of column 3 to
# "NewName" in all of them
这不会 return 任何错误(我能想到的所有其他版本 returned 某种错误),但它也不会更改变量名称。
我正在使用循环创建多个数据框和每个数据框内的不同变量,现在我需要重命名其中一些变量,以便稍后可以将数据框合并为一个。一切正常,除了重命名。如果我在使用 colnames(DF)[[3]] <- "NewName"
的常规调用中输入自己的数据框名称和变量,但不知何故,当我尝试使用 assign 以便它在循环中完成时,它什么也没做。
我们可以尝试 ?eapply()
将 data.table
包中的 setnames()
应用到您全球环境中的所有 data.frame。
library(data.table)
eapply(.GlobalEnv, function(x) if (is.data.frame(x)) setnames(x, 3, "NewName"))
这是您可以在您的环境中对所有 data frames
进行循环的方法。由于您在您的环境中只查找 data frame
,因此您可以避免接触任何其他变量的风险。关键是您应该 assign
对循环中的每个 data frame
进行新更改。
df1 <- data.frame(q=1,w=2,e=3)
df2 <- data.frame(q=1,w=2,e=3)
df3 <- data.frame(q=1,w=2,e=3)
# > df1
# q w e
# 1 1 2 3
# > df2
# q w e
# 1 1 2 3
# > df3
# q w e
# 1 1 2 3
DFs=names(which(sapply(.GlobalEnv, is.data.frame)))
for (i in 1:length(DFs)){
df=get(paste0(DFs[i]))
colnames(df)[3]="newName"
assign(DFs[i], df)
}
# > df1
# q w newName
# 1 1 2 3
# > df2
# q w newName
# 1 1 2 3
# > df3
# q w newName
# 1 1 2 3
我正在尝试在多个数据帧上重命名一个变量,但赋值不起作用。这是我正在尝试的代码
assign(colnames(eval(as.name(DataFrameX)))[[3]], "<- NewName")
# The idea is, go through every dataset, and change the name of column 3 to
# "NewName" in all of them
这不会 return 任何错误(我能想到的所有其他版本 returned 某种错误),但它也不会更改变量名称。
我正在使用循环创建多个数据框和每个数据框内的不同变量,现在我需要重命名其中一些变量,以便稍后可以将数据框合并为一个。一切正常,除了重命名。如果我在使用 colnames(DF)[[3]] <- "NewName"
的常规调用中输入自己的数据框名称和变量,但不知何故,当我尝试使用 assign 以便它在循环中完成时,它什么也没做。
我们可以尝试 ?eapply()
将 data.table
包中的 setnames()
应用到您全球环境中的所有 data.frame。
library(data.table)
eapply(.GlobalEnv, function(x) if (is.data.frame(x)) setnames(x, 3, "NewName"))
这是您可以在您的环境中对所有 data frames
进行循环的方法。由于您在您的环境中只查找 data frame
,因此您可以避免接触任何其他变量的风险。关键是您应该 assign
对循环中的每个 data frame
进行新更改。
df1 <- data.frame(q=1,w=2,e=3)
df2 <- data.frame(q=1,w=2,e=3)
df3 <- data.frame(q=1,w=2,e=3)
# > df1
# q w e
# 1 1 2 3
# > df2
# q w e
# 1 1 2 3
# > df3
# q w e
# 1 1 2 3
DFs=names(which(sapply(.GlobalEnv, is.data.frame)))
for (i in 1:length(DFs)){
df=get(paste0(DFs[i]))
colnames(df)[3]="newName"
assign(DFs[i], df)
}
# > df1
# q w newName
# 1 1 2 3
# > df2
# q w newName
# 1 1 2 3
# > df3
# q w newName
# 1 1 2 3