我是R语言的新手。我想更改列表元素编号的名称。
目前我的列表如下:(来自R Studio的屏幕截图)
> Degrees_df1
[[1]]
[1] "MCA"
[[2]]
[1] "B.Com"
[[3]]
[1] "XII"
[[4]]
[1] "X"
我想像这样转换它:
> Degrees_df1
$Degrees1
[1] "MCA"
$Degrees2
[1] "B.Com"
$Degrees3
[1] "XII"
$Degrees4
[1] "X"
我是R语言的新手任何一种帮助都会对我感激。谢谢你提前.......
答案 0 :(得分:1)
所以你希望你的名单有名字:
NAME <- paste0("Degrees", 1:length(Degrees_df1))
以下任何一种情况都可以:
names(Degrees_df1) <- NAME
attr(Degrees_df1, "names") <- NAME
Degrees_df1 <- "names<-"(Degrees_df1, NAME)
Degrees_df1 <- setNames(Degrees_df1, NAME)
Degrees_df1 <- structure(Degrees_df1, names = NAME)
但我认为,最好的方法是在创建列表时给出名称。例如,如果你这样做:
list(1, 2, 3, 4)
结果列表没有名称。如果你这样做
list(a = 1, b= 2, c = 3, d = 4)
结果列表有名称。
如果我在那里应用粘贴功能,我会收到这样的错误:
assign中的错误(名称(paste0(“Degrees_df”,i)),paste0(“Degrees”,1:length(get(paste0(“Degrees_df”,::第一个参数无效
抱歉,我想使用粘贴功能在for循环中修改代码。
你可能需要这个(效率不高):
df_i <- get(paste0("Degrees_df", i)) ## a local variable
names(df_i) <- paste0("Degrees", 1:length(df_i)) ## modify local variable
assign(paste0("Degrees_df", i), df_i) ## write back and update
或(更好):
df_i <- get(paste0("Degrees_df", i)) ## a local variable
assign(paste0("Degrees_df", i),
setNames(df_i, paste0("Degrees", 1:length(df_i))))
# assign(paste0("Degrees_df", i),
# "names<-"(df_i, paste0("Degrees", 1:length(df_i))))
# assign(paste0("Degrees_df", i),
# structure(df_i, names = paste0("Degrees", 1:length(df_i))))
assign
用于为变量赋值(或另一个变量)。看起来您的错误代码尝试分配名称属性。请注意,list / data.frame的名称是“attributes”,而不是变量,因此您无法使用assign
来更改它们。