使用循环重命名列表的字幕

时间:2014-11-17 14:07:09

标签: r

我必须在名为l1的主矩阵列表中重命名子列表标题。每个Name(n)与作为字符串的值相关。这是我的代码:

names(l1)[1] <- Name1
names(l1)[2] <- Name2
names(l1)[3] <- Name3
names(l1)[4] <- Name4
## ...
names(l1)[43] <- Name43

如您所见,我有43个子列表。有没有办法使用像for (i in 1:43)之类的自动循环?我尝试进行循环,但我是初学者,现在非常难。

编辑:我想重命名列表中的元素,而不必手动输入43行。这是我列表中的前三个元素:

str(l1)
List of 43
 $ XXX                      : num [1:640, 1:3] -0.83 -0.925 -0.623 -0.191 0.155 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:3] "EV_BICYCLE" "HW_DISTANCE" "NO_ASSETS"
 $ XXX                                 : num [1:640, 1:2] -0.159 0.485 -0.686 -0.245 -3.361 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:2] "HOME_OWN" "METRO_DISTANCE"
 $ XXX                      : num [1:640, 1:3] -0.79 1.15 0.224 0.388 -1.571 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:3] "BICYCLE" "HOME_OWN_SC" "POP_SC"

也就是说,我想用Name1替换43 XXX,Name2 ...到Name43

1 个答案:

答案 0 :(得分:0)

尝试

names(l1) <- unlist(mget(ls(pattern="^Nom_F")))
str(l1, list.len=2)
 #List of 3
 # $ Accessibility : int [1:5, 1:5] 10 10 3 9 7 6 8 2 7 8 ...
 # ..- attr(*, "dimnames")=List of 2
 # .. ..$ : NULL
 #  .. ..$ : chr [1:5] "A" "B" "C" "D" ...
 # $ Access        : int [1:5, 1:5] 6 4 10 5 9 8 9 4 7 1 ...
 #..- attr(*, "dimnames")=List of 2
 # .. ..$ : NULL
 # .. ..$ : chr [1:5] "A" "B" "C" "D" ...

您可以创建vector个真实标题,而不是创建单独的对象。例如

 v1 <- LETTERS[1:3]
 names(l1) <- v1

数据

set.seed(42)
l1 <- setNames(lapply(1:3, function(x)
          matrix(sample(1:10, 5*5, replace=TRUE), ncol=5,
             dimnames=list(NULL, LETTERS[1:5]))), rep('XXX',3))

Nom_F1 <- "Accessibility"
Nom_F2 <- "Access"
Nom_F3 <- "Poverty_and_SC"