楼主: 一诺9257
7675 10

[问答] R矩阵存储 [推广有奖]

  • 10关注
  • 7粉丝

教授

66%

还不是VIP/贵宾

-

威望
0
论坛币
23 个
通用积分
3.8021
学术水平
28 点
热心指数
34 点
信用等级
17 点
经验
301 点
帖子
949
精华
0
在线时间
1321 小时
注册时间
2010-3-21
最后登录
2020-2-22

楼主
一诺9257 发表于 2014-4-21 19:21:58 |AI写论文
5论坛币
现在for循环100次!每一次得到一个矩阵请问怎么存储?谢谢
a=NULL
for(i in 1:100){  
  a[i]=matrix(rnorm(20),nrow = 4, ncol = 5)

}



上面的命令a的赋值时错误的,请问怎么设置a来存储矩阵matrix(rnorm(20),nrow = 4, ncol = 5)?谢谢

最佳答案

路浩张琦 查看完整内容

好累啊,绕那么大个弯……是问题没问好,还是都太不专业了? a
关键词:r矩阵 matrix for循环 Norm null matrix

本帖被以下文库推荐

  • · R学习|主题: 262, 订阅: 161

沙发
路浩张琦 发表于 2014-4-21 19:21:59
好累啊,绕那么大个弯……是问题没问好,还是都太不专业了?

a <- array(rnorm(20),dim=c(4,5,100))

这样就得到结果了,何必非要用matrix?
好吧,楼主这确实是个好问题,涉及到存储方式的问题,说一下自己的想法:
首先,矩阵实际上是有一个附加属性(维数dim)的向量,维数即为一个长度为2的向量,用来指定矩阵的行数和列数。
其次,当a被赋值NULL,如果a下一步被matrix赋值,实质上是用matrix生成的矩阵整体覆盖a的NULL值,a整体属性发生改变
最后,由于语句中,a是被循环赋值,matrix看起来只是覆盖a中的一个标量,而由于标量无法单独改变属性,因此matrix生成的矩阵赋值失败,a中的那个标量仅仅被matrix生成矩阵中的第一个值所覆盖,可以通过下列语句来判断其过程:
a <- NULL
for(i in 1:100) a[i] <- matrix(2:21,nrow = 4, ncol = 5)
此时可以发现a全部被matrix生成矩阵中的第一个值“2”所覆盖
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
一诺9257 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
windblood 发表于 2014-4-21 20:59:03
存成3为数组
a初始化为4*5*100,然后给赋值a[,,i]
另外,不推荐用for循环,试试apply族函数
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
一诺9257 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
凸集分离定理 发表于 2014-4-22 00:06:45
  1. #可用多维数组,需要运算快也可用分块矩阵
  2. #下面使用多维数组
  3. a = array(NA,dim=c(4,5,100))
  4. for(i in 1:100){  
  5.   a[,,i]=matrix(rnorm(20),nrow = 4, ncol = 5)
  6.   }
  7. a[,,10]
复制代码


已有 1 人评分学术水平 热心指数 信用等级 收起 理由
一诺9257 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

报纸
yywan0913 在职认证  发表于 2014-4-22 08:43:14
多维可以
list也可选择
  1. a=list()
  2.    for()
  3.    a[[i]]=
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
一诺9257 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

是什么给了你自信

地板
路浩张琦 发表于 2014-5-10 20:39:23
这样都不给悬赏,感觉不会再爱了……

7
jnuctr 发表于 2014-5-10 21:12:51
路浩张琦 发表于 2014-5-10 20:39
这样都不给悬赏,感觉不会再爱了……
你的真的可行吗?

8
路浩张琦 发表于 2014-5-11 00:34:05
jnuctr 发表于 2014-5-10 21:12
你的真的可行吗?
自己用R试试不就知道了

9
king64 发表于 2014-5-11 06:03:07
这样是不是你想要的!
存储了100个文件,没问题。

a=NULL
for(i in 1:100){  
   a=matrix(rnorm(20),nrow = 4, ncol = 5)
   filnm <- paste("a",i,".Rdata",sep="")
   save(a,file=filnm)
}

10
ts_xjw 发表于 2014-5-11 09:26:52
很好,感谢各位讨论。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-8 21:49