将列表转换为R中的命名列表

时间:2016-08-20 22:37:28

标签: r

我是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语言的新手任何一种帮助都会对我感激。谢谢你提前.......

1 个答案:

答案 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来更改它们。