如何在访问for循环中的元素时使用列表名称?

时间:2017-04-10 21:00:10

标签: r

我有一个矩阵列表,需要在for循环中分别访问名称和矩阵。我可以按其元素或名称访问列表,但是,这两种方法都不适用于我。我创建了一个玩具示例来展示我的问题:

# example list construction
a <- matrix(c(1),nrow=3,ncol=3)
b <- matrix(c(2),nrow=3,ncol=3)
c <- matrix(c(3),nrow=3,ncol=3)
my_list <- list("a"=a,"b"=b, "c"=c)

矩阵和名称的变量是&#34;字符串相等&#34;因为我希望找到一种方法可以轻松地从一个字符串角色切换到另一个(从变量到字符串并返回)。

有没有办法,为了通过名单列表的相应元素访问列表元素?我试试这里:

# 1. approach (by list names): error - argument must be an array 
for (i in names(my_list)){
  print(i)
  s<-rowSums(my_list$i)       $ why is rowSums(my_list$"a") working?
  print(s)
}

如果没有,我如何以这样一种方式访问​​列表元素的名称,即我收到一个普通的字符串,例如可打印的(在我的实际任务中,我需要将字符串作为列名添加到另一个数据框)?

# 2. approach (by list elements): name is not printed
for (i in my_list){
  print(names(i))
  s<-rowSums(i)
  print(s)
}

我可能不了解列表的数据格式以及for循环的循环方式。

谢谢!

跟进问题

正如Andrew Gustar所写,解决方案是使用逐个列表的方法,但使用my_list[[i]]而不是my_list$i。现在我甚至可以使用旧名称建立一个新列表:

collect <- list()
for (i in names(my_list)){
  s<-rowSums(my_list[[i]])
  collect[[i]] <- c(s)
}

是否也可以将collect构建为矩阵或data.frame?

collect <- c()

  collect[[i]] <- c(s)

建立一个清单。

collect <- data.frame()

以及以下三个中的一个

  collect[i] <- c(s)
  collect[[i]] <- c(s)
  collect$i <- c(s)

都会返回错误。

非常感谢!

0 个答案:

没有答案