[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