【问题标题】:Create a big list in R with loop使用循环在 R 中创建一个大列表
【发布时间】:2015-02-13 14:59:10
【问题描述】:

我对此有疑问:
我需要创建一个矩阵列表。这是一个数据框:

data=data.frame("Node"=c(1:5), posx=c(2,3,6,8,1), posy=c(1,1,4,7,8))
  Node posx posy
1    1    2    1
2    2    3    1
3    3    6    4
4    4    8    7
5    5    1    8

现在我想创建一个矩阵列表。带循环。我想创建这样的矩阵列表:

l=list(l1,l2,l3,l4,l5)

地点:

l1=cbind(c(2),c(1))
l2=cbind(c(3),c(1))
l3=cbind(c(6),c(4))
l4=cbind(c(8),c(7))
l5=cbind(c(1),c(8))

这是我的尝试:

for (i in 1:(data$Node) ) {
  l=list(cbind(c(data$posx[i]), (data$posy[i])))
}

【问题讨论】:

  • 我想你想要的新问题是list2env(setNames(lapply(split(as.matrix(data[,-1]),row(data)[,1]), matrix, ncol=2), paste0('mat', 1:nrow(data))), envir=.GlobalEnv) 然后检查mat1, mat2
  • 是的,非常感谢!对于这个不太好的问题,我深表歉意。
  • 没问题,我对你真正想要的东西感到困惑。但是,我认为最好将它放在一个列表中而不是作为单个矩阵

标签: r loops matrix


【解决方案1】:

你也可以使用by:

by(data[-1], data[1], as.matrix)

【讨论】:

  • 我明天试试!谢谢你的回复!
【解决方案2】:

试试

lapply(seq_len(nrow(data)), function(i) as.matrix(data[i,-1]))

或者

lapply(split(data[,-1],row(data)[,1]), as.matrix)

或者

lapply(split(as.matrix(data[,-1]),row(data)[,1]), matrix, ncol=2)

或者使用data.table

library(data.table)
setDT(data)[,list(list(as.matrix(.SD))) , by=Node]$V1

【讨论】:

  • 非常感谢!这是工作!在这种情况下,如果我有一个额外的专栏?示例:data=data.frame("Node"=c(1:5), posx=c(2,3,6,8,1), posy=c(1,1,4,7,8), rnd =c("A","B","C","D","E")) 。但我只想要数字? (没有最后一列?)
  • @sgtFury 试试lapply(split(data[,2:3], row(data)[,1]), as.matrix)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-11
  • 2019-07-07
  • 1970-01-01
相关资源
最近更新 更多