[R] avoiding a loop: "cumsum-like"

GOUACHE David D.GOUACHE at arvalisinstitutduvegetal.fr
Thu Nov 2 11:15:49 CET 2006


Hello Rhelpers,

I need to run the following loop over a large number of data-sets, and was wondering if it could somehow be vectorized. It's more or less a cumulative sum, but slightly more complex.
Here's the code, and an example dataset (called tab in my code) follows.
Thanks in advance for any suggestions!

res<-0
for (i in min(tab$Date):max(tab$Date))
{
	if (is.na(tab$posit.lat[tab$Date==i])==T)
	{
		res<-c(res,res[length(res)]+tab$x.jour[tab$Date==i])
	}
	else
	{
		if (res[tab$posit.lat[tab$Date==i]+1]<30)
		{
			res<-c(res,res[length(res)]+tab$x.jour[tab$Date==i])
		}
		else
		{
			res<-c(res,res[length(res)]+tab$x.jour[tab$Date==i]+0.8*res[tab$posit.lat[tab$Date==i]+1])
		}
	}
}
res[-1]


Date	x.jour	posit.lat
35804	0	NA
35805	0	NA
35806	0	NA
35807	0	NA
35808	0	NA
35809	2.97338883	NA
35810	2.796389915	NA
35811	0	NA
35812	0	NA
35813	1.000711886	NA
35814	0.894422571	NA
35815	0	NA
35816	0	NA
35817	0	NA
35818	0	NA
35819	0	NA
35820	0	NA
35821	0	NA
35822	0	NA
35823	0	NA
35824	0	NA
35825	0	NA
35826	0	NA
35827	0	NA
35828	0	NA
35829	0	NA
35830	0	NA
35831	0	NA
35832	0	NA
35833	0	NA
35834	0	NA
35835	0	NA
35836	0	NA
35837	0	NA
35838	0	NA
35839	0	NA
35840	2.47237455	NA
35841	0	2
35842	0	3
35843	0	4
35844	0	5
35845	0	6
35846	0	7
35847	4.842160488	8
35848	2.432125036	9
35849	0	10
35850	0	12
35851	0	14
35852	0	16
35853	3.739683882	18
35854	1.980214421	20
35855	0	22
35856	0	24
35857	5.953444078	27
35858	6.455722475	29
35859	0	31
35860	3.798690334	32
35861	6.222993364	34
35862	3.746243098	35
35863	0	35
35864	0	36
35865	0	37
35866	0	38
35867	0	38
35868	0	39
35869	0	40
35870	0	41
35871	0	42
35872	0	43
35873	0	44
35874	0	45
35875	0	46
35876	0	47
35877	1.951774892	48
35878	0	49
35879	0	50
35880	1.702837643	50
35881	0	52
35882	0	53
35883	0	54
35884	0	55
35885	5.953444078	57
35886	0	58
35887	5.737515358	59
35888	0	61
35889	6.215941227	63
35890	4.731576675	64
35891	0	66
35892	2.255448314	66
35893	3.782283008	67
35894	3.244474546	68
35895	1.808553193	69
35896	2.622680002	70
35897	0	71
35898	0	72
35899	0	72
35900	1.7084177	73
35901	1.28455982	74
35902	2.320013736	76
35903	0	77
35904	0	78
35905	0	79
35906	0	79
35907	0	80
35908	6.716812458	81
35909	0	82
35910	6.796571531	84
35911	5.573668337	85
35912	5.42513958	86
35913	3.774513877	86
35914	0	87
35915	0	89
35916	0	90
35917	4.208252725	91
35918	0	92
35919	0	93
35920	0	95
35921	5.70023661	97
35922	0	98
35923	0	100
35924	0	102
35925	0	103
35926	0	104

David Gouache
Arvalis - Institut du Végétal
Station de La Minière
78280 Guyancourt
Tel: 01.30.12.96.22 / Port: 06.86.08.94.32



More information about the R-help mailing list