作者disney82231 (小刀会序曲)
看板R_Language
标题[问题] apply 取代for
时间Thu Mar 29 14:59:49 2018
[问题类型]:
程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
[软体熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
用for 写了一个回圈,想用apply写出一样的结果
另外想请问,在多数情况下,apply都能取代for吗
[程式范例]:
for (i in 2:10){
x$v1[x[,i]==1] <- i }
}
若每列x的第i行=1时,x每列的第一行改成i
[关键字]:
apply for
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 120.126.194.162
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1522306793.A.5DA.html
1F:→ andrew43: 看起来就不像是apply。apply是逐列或逐行做同一个func 03/29 15:10
2F:→ andrew43: 你的注解和code似乎不是同义的。 03/29 15:17
3F:→ clansoda: Hi, I suggest you to watch this article #1QhBLjUr 03/29 15:26
4F:→ clansoda: I have explained when and why you should use apply 03/29 15:26
5F:→ clansoda: or for loop in a given scenario 03/29 15:26
6F:推 vfgce: 你有跑过你写的东西吗? 03/29 18:49
7F:→ vfgce: 你这样是把第10行值为1的相对V1值设为10... 03/29 18:50
8F:推 vfgce: 对不起,看错了... 03/29 18:53
9F:推 vfgce: 有不只一个i行=1时,第一行如何取? 03/29 19:04
我要回圈的行数,里面只有0跟1而已,且同一列中2到10行只会有一个1~
※ 编辑: disney82231 (120.126.194.162), 03/29/2018 19:11:57
10F:推 vfgce: x1 = apply( x[,2:10],1, function(a) which(a==1)+1 ) 03/29 19:21
11F:→ vfgce: 再令x$v1=x1, 假设每列2-10行中都会也只有一个1, 03/29 19:22
12F:推 vfgce: 但问题再变过就不见得能用这种方法处理. 03/29 19:25
13F:推 vfgce: 一般若是涉及索引,用for 比较容易写...apply不一定能写. 03/29 19:34
14F:推 vfgce: 对了,一般在apply中不修改变数值,而是传回值... 03/29 19:49
刚刚试了大大的CODE,这样可以改,但原本第一行是1的话就会变成numeric(0)
不过还是谢谢你,所以我这种情况的话用for是最适合的吗
※ 编辑: disney82231 (120.126.194.162), 03/29/2018 19:54:47
15F:推 vfgce: 有些东西想不出来怎麽用apply就只能用for.. 03/29 20:52
16F:→ vfgce: 但很多时候,是不够了解 apply怎麽用... 03/29 20:53
17F:推 celestialgod: 这个用vectorize加速比较好,apply不适用 03/29 22:13
18F:推 celestialgod: 晚点传code 03/29 22:14
19F:→ celestialgod: 测了一下... 其实回圈改一改就好XDD 03/29 23:31
20F:→ obarisk: 这个问题用diag可以解 03/30 05:32