楼主: salesone
10614 11

[问答] R语言修改矩阵元素 [推广有奖]

  • 0关注
  • 0粉丝

高中生

15%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
117 点
帖子
13
精华
0
在线时间
26 小时
注册时间
2011-5-4
最后登录
2019-5-5

楼主
salesone 发表于 2015-8-7 18:36:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
有个4*52的零矩阵A,有个矩阵b=【3,1;23,50;42,2;10,11】,维度4*2. 现想把A矩阵中第一行的第3个和第1个元素修改为1,第二行的第23和第50个元素修改为1,依次类推。。。。。也就是矩阵A中的每行,以矩阵b中每行元素为对应位置,将其修改为1. 如果用循环,能够写出来,但是程序太大,想避免循环,请教大神如何不用循环,一步实现上述过程?在此先谢谢了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:矩阵元素 R语言 程序 如何 元素

回帖推荐

沙发
salesone 发表于 2015-8-7 21:28:08
ding yi xia tiezi

藤椅
十里春风 学生认证  发表于 2015-8-8 17:42:55
  1. A=matrix(0,nrow=4,ncol=52)
  2. b=matrix(c(3,1,23,50,42,2,10,11),nrow=4,byrow=TRUE)
  3. ##可以实现,temp是中间结果,不用关注。
  4. temp<-sapply(1:nrow(A),function(i) A[i,b[i,]]<<-1)
  5. ##这种方法也可以
  6. b=4*(b-1)+1:nrow(b)
  7. A[t(b)]<-1
复制代码


板凳
rosenbloog 发表于 2015-8-8 23:34:14
十里春风 发表于 2015-8-8 17:42
第二种方法降一维index很巧妙,赞;第一种temp后面是不是还有其他code?只是中间结果吧

报纸
十里春风 学生认证  发表于 2015-8-9 10:01:00
rosenbloog 发表于 2015-8-8 23:34
第二种方法降一维index很巧妙,赞;第一种temp后面是不是还有其他code?只是中间结果吧
用sapply来对A元素进行修改,修改只是中间过程,temp是sapply输出的结果,不过这个结果并不是我们需要的。

地板
salesone 发表于 2015-8-10 14:06:42
十里春风 发表于 2015-8-8 17:42
厉害,方法非常巧妙。非常感谢。不过,两个程序都没有看懂,请再细细指教一下。第一个程序,function(i) A[i,b[i,]]<<-1, 特别是这个<<-,期初我以为你打错了,应该是<-,我用了<-运行完之后居然没有任何变化,又用了<<-,果然实现了,请问这两个赋值号之间的区别是什么?如何使用?
第二个程序,这里A[t(b)]<-1为什么要给b转置,我尝试了不转置b,显示错误,下表出界。A[]这个括号内,如果是个矩阵,它是怎么引用的?为什么不转置会出界?
谢谢了,我是菜鸟一个,希望指点一下。

7
十里春风 学生认证  发表于 2015-8-10 16:53:55
salesone 发表于 2015-8-10 14:06
厉害,方法非常巧妙。非常感谢。不过,两个程序都没有看懂,请再细细指教一下。第一个程序,function(i) ...
sapply计算中间结果是局部变量,<-是局部赋值,<<-可以对全局变量进行修改。
A是按矩阵index取值,b是4x2,每一行是一个位置。A[t(b)]是把A当做向量index取值。也可以用另一种,更直观,A[c(b)],把b转换为向量,然后赋值。

8
salesone 发表于 2015-8-12 16:52:58
十里春风 发表于 2015-8-10 16:53
sapply计算中间结果是局部变量,
非常感谢,学习了。。。

9
hzx21th 发表于 2015-8-12 21:44:35
其实我在好奇sapply函数和循环会差多少

10
jjxm20060807 发表于 2015-8-13 21:23:27
谢谢分享

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

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