[R] Error in combined for() and if() code

2010-12-28 Thread Nathan Miller
Hello,

I am trying to filter a data set like below so that the peaks in the Phase
value are more obvious and can be identified by a peak finding function
following the useful advise of Carl Witthoft. I have written the following

for(i in length(data$Phase)){
newphase=if(abs(data$Phase[i+1]-data$Phase[i])6){
data$Phase[i+1]
}else{data$Phase[i]
}
}

I get the following error which I have not seen before when I paste the code
into R

Error in if (abs(data$Phase[i + 1] - data$Phase[i])  6) { :
  missing value where TRUE/FALSE needed

I don't have much experience with such loops as I have tried to avoid using
them in the past. Can anyone identify the error(s) in the code I have
written or a simpler means of writing such a filter?

Thank you,
Nate


data=
Time Phase
1  0.000 15.18
2  0.017 13.42
3  0.034 11.40
4  0.051 18.31
5  0.068 25.23
6  0.085 33.92
7  0.102 42.86
8  0.119 42.87
9  0.136 42.88
10 0.153 42.88
11 0.170 42.87
12 0.186 42.88
13 0.203 42.88
14 0.220 42.78
15 0.237 33.50
16 0.254 24.81
17 0.271 17.20
18 0.288 10.39
19 0.305 13.97
20 0.322 16.48
21 0.339 14.75
22 0.356 20.80
23 0.373 25.79
24 0.390 31.25
25 0.407 39.89
26 0.423 40.04
27 0.440 40.05
28 0.457 40.05
29 0.474 40.05
30 0.491 40.05
31 0.508 40.06
32 0.525 40.07
33 0.542 32.23
34 0.559 23.90
35 0.576 17.86
36 0.592 11.63
37 0.609 12.78
38 0.626 13.12
39 0.643 10.93
40 0.660 10.63
41 0.677 10.82
42 0.694 11.84
43 0.711 20.44
44 0.728 27.33
45 0.745 34.22
46 0.762 41.55
47 0.779 41.55
48 0.796 41.55
49 0.813 41.53
50 0.830 41.53
51 0.847 41.52
52 0.864 41.52
53 0.880 41.53
54 0.897 41.53
55 0.914 33.07
56 0.931 25.12
57 0.948 19.25
58 0.965 11.30
59 0.982 12.48
60 0.999 13.85
61 1.016 13.62
62 1.033 12.62
63 1.050 19.39
64 1.067 25.48
65 1.084 31.06
66 1.101 39.49
67 1.118 39.48
68 1.135 39.46
69 1.152 39.45
70 1.169 39.43
71 1.185 39.42
72 1.202 39.42
73 1.219 39.41
74 1.236 39.41
75 1.253 37.39
76 1.270 29.03
77 1.287 20.61
78 1.304 14.07
79 1.321  9.12

[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Error in combined for() and if() code

2010-12-28 Thread Duncan Murdoch

On 28/12/2010 1:08 PM, Nathan Miller wrote:

Hello,

I am trying to filter a data set like below so that the peaks in the Phase
value are more obvious and can be identified by a peak finding function
following the useful advise of Carl Witthoft. I have written the following

for(i in length(data$Phase)){
newphase=if(abs(data$Phase[i+1]-data$Phase[i])6){


When i is at its maximum, i+1 will be beyond the length of data$Phase, 
so you shouldn't use it as an index.


Duncan Murdoch


data$Phase[i+1]
}else{data$Phase[i]
}
}

I get the following error which I have not seen before when I paste the code
into R

Error in if (abs(data$Phase[i + 1] - data$Phase[i])  6) { :
   missing value where TRUE/FALSE needed

I don't have much experience with such loops as I have tried to avoid using
them in the past. Can anyone identify the error(s) in the code I have
written or a simpler means of writing such a filter?

Thank you,
Nate


data=
 Time Phase
1  0.000 15.18
2  0.017 13.42
3  0.034 11.40
4  0.051 18.31
5  0.068 25.23
6  0.085 33.92
7  0.102 42.86
8  0.119 42.87
9  0.136 42.88
10 0.153 42.88
11 0.170 42.87
12 0.186 42.88
13 0.203 42.88
14 0.220 42.78
15 0.237 33.50
16 0.254 24.81
17 0.271 17.20
18 0.288 10.39
19 0.305 13.97
20 0.322 16.48
21 0.339 14.75
22 0.356 20.80
23 0.373 25.79
24 0.390 31.25
25 0.407 39.89
26 0.423 40.04
27 0.440 40.05
28 0.457 40.05
29 0.474 40.05
30 0.491 40.05
31 0.508 40.06
32 0.525 40.07
33 0.542 32.23
34 0.559 23.90
35 0.576 17.86
36 0.592 11.63
37 0.609 12.78
38 0.626 13.12
39 0.643 10.93
40 0.660 10.63
41 0.677 10.82
42 0.694 11.84
43 0.711 20.44
44 0.728 27.33
45 0.745 34.22
46 0.762 41.55
47 0.779 41.55
48 0.796 41.55
49 0.813 41.53
50 0.830 41.53
51 0.847 41.52
52 0.864 41.52
53 0.880 41.53
54 0.897 41.53
55 0.914 33.07
56 0.931 25.12
57 0.948 19.25
58 0.965 11.30
59 0.982 12.48
60 0.999 13.85
61 1.016 13.62
62 1.033 12.62
63 1.050 19.39
64 1.067 25.48
65 1.084 31.06
66 1.101 39.49
67 1.118 39.48
68 1.135 39.46
69 1.152 39.45
70 1.169 39.43
71 1.185 39.42
72 1.202 39.42
73 1.219 39.41
74 1.236 39.41
75 1.253 37.39
76 1.270 29.03
77 1.287 20.61
78 1.304 14.07
79 1.321  9.12

[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Error in combined for() and if() code

2010-12-28 Thread Uwe Ligges



On 28.12.2010 19:08, Nathan Miller wrote:

Hello,

I am trying to filter a data set like below so that the peaks in the Phase
value are more obvious and can be identified by a peak finding function
following the useful advise of Carl Witthoft. I have written the following

for(i in length(data$Phase)){


Nonsense: In this case the loop will only run once for i=length(data$Phase)

you probably want

for(i in seq_along(data$Phase)){



newphase=if(abs(data$Phase[i+1]-data$Phase[i])6){


Nonsense:
1. if()... won't return any useful result.
2. i+1 is not within your data

Uwe Ligges



data$Phase[i+1]
}else{data$Phase[i]
}
}

I get the following error which I have not seen before when I paste the code
into R

Error in if (abs(data$Phase[i + 1] - data$Phase[i])  6) { :
   missing value where TRUE/FALSE needed

I don't have much experience with such loops as I have tried to avoid using
them in the past. Can anyone identify the error(s) in the code I have
written or a simpler means of writing such a filter?

Thank you,
Nate


data=
 Time Phase
1  0.000 15.18
2  0.017 13.42
3  0.034 11.40
4  0.051 18.31
5  0.068 25.23
6  0.085 33.92
7  0.102 42.86
8  0.119 42.87
9  0.136 42.88
10 0.153 42.88
11 0.170 42.87
12 0.186 42.88
13 0.203 42.88
14 0.220 42.78
15 0.237 33.50
16 0.254 24.81
17 0.271 17.20
18 0.288 10.39
19 0.305 13.97
20 0.322 16.48
21 0.339 14.75
22 0.356 20.80
23 0.373 25.79
24 0.390 31.25
25 0.407 39.89
26 0.423 40.04
27 0.440 40.05
28 0.457 40.05
29 0.474 40.05
30 0.491 40.05
31 0.508 40.06
32 0.525 40.07
33 0.542 32.23
34 0.559 23.90
35 0.576 17.86
36 0.592 11.63
37 0.609 12.78
38 0.626 13.12
39 0.643 10.93
40 0.660 10.63
41 0.677 10.82
42 0.694 11.84
43 0.711 20.44
44 0.728 27.33
45 0.745 34.22
46 0.762 41.55
47 0.779 41.55
48 0.796 41.55
49 0.813 41.53
50 0.830 41.53
51 0.847 41.52
52 0.864 41.52
53 0.880 41.53
54 0.897 41.53
55 0.914 33.07
56 0.931 25.12
57 0.948 19.25
58 0.965 11.30
59 0.982 12.48
60 0.999 13.85
61 1.016 13.62
62 1.033 12.62
63 1.050 19.39
64 1.067 25.48
65 1.084 31.06
66 1.101 39.49
67 1.118 39.48
68 1.135 39.46
69 1.152 39.45
70 1.169 39.43
71 1.185 39.42
72 1.202 39.42
73 1.219 39.41
74 1.236 39.41
75 1.253 37.39
76 1.270 29.03
77 1.287 20.61
78 1.304 14.07
79 1.321  9.12

[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Error in combined for() and if() code

2010-12-28 Thread Duncan Murdoch

On 28/12/2010 1:13 PM, Uwe Ligges wrote:



On 28.12.2010 19:08, Nathan Miller wrote:

Hello,

I am trying to filter a data set like below so that the peaks in the Phase
value are more obvious and can be identified by a peak finding function
following the useful advise of Carl Witthoft. I have written the following

for(i in length(data$Phase)){


Nonsense: In this case the loop will only run once for i=length(data$Phase)


Yes, I missed that.



you probably want

for(i in seq_along(data$Phase)){



newphase=if(abs(data$Phase[i+1]-data$Phase[i])6){


Nonsense:
1. if()... won't return any useful result.


if (cond) v1 else v2

does return a value (either v1 or v2).  So the construction

newphase = if (abs(data$Phase[i+1] 

will set newphase to a new value each time through the loop.  That's 
probably not what was intended...



2. i+1 is not within your data


That's the only one I saw.

Duncan Murdoch



Uwe Ligges



data$Phase[i+1]
}else{data$Phase[i]
}
}

I get the following error which I have not seen before when I paste the code
into R

Error in if (abs(data$Phase[i + 1] - data$Phase[i])   6) { :
missing value where TRUE/FALSE needed

I don't have much experience with such loops as I have tried to avoid using
them in the past. Can anyone identify the error(s) in the code I have
written or a simpler means of writing such a filter?

Thank you,
Nate


data=
  Time Phase
1  0.000 15.18
2  0.017 13.42
3  0.034 11.40
4  0.051 18.31
5  0.068 25.23
6  0.085 33.92
7  0.102 42.86
8  0.119 42.87
9  0.136 42.88
10 0.153 42.88
11 0.170 42.87
12 0.186 42.88
13 0.203 42.88
14 0.220 42.78
15 0.237 33.50
16 0.254 24.81
17 0.271 17.20
18 0.288 10.39
19 0.305 13.97
20 0.322 16.48
21 0.339 14.75
22 0.356 20.80
23 0.373 25.79
24 0.390 31.25
25 0.407 39.89
26 0.423 40.04
27 0.440 40.05
28 0.457 40.05
29 0.474 40.05
30 0.491 40.05
31 0.508 40.06
32 0.525 40.07
33 0.542 32.23
34 0.559 23.90
35 0.576 17.86
36 0.592 11.63
37 0.609 12.78
38 0.626 13.12
39 0.643 10.93
40 0.660 10.63
41 0.677 10.82
42 0.694 11.84
43 0.711 20.44
44 0.728 27.33
45 0.745 34.22
46 0.762 41.55
47 0.779 41.55
48 0.796 41.55
49 0.813 41.53
50 0.830 41.53
51 0.847 41.52
52 0.864 41.52
53 0.880 41.53
54 0.897 41.53
55 0.914 33.07
56 0.931 25.12
57 0.948 19.25
58 0.965 11.30
59 0.982 12.48
60 0.999 13.85
61 1.016 13.62
62 1.033 12.62
63 1.050 19.39
64 1.067 25.48
65 1.084 31.06
66 1.101 39.49
67 1.118 39.48
68 1.135 39.46
69 1.152 39.45
70 1.169 39.43
71 1.185 39.42
72 1.202 39.42
73 1.219 39.41
74 1.236 39.41
75 1.253 37.39
76 1.270 29.03
77 1.287 20.61
78 1.304 14.07
79 1.321  9.12

[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Error in combined for() and if() code

2010-12-28 Thread David Winsemius


On Dec 28, 2010, at 1:08 PM, Nathan Miller wrote:


Hello,

I am trying to filter a data set like below so that the peaks in the  
Phase
value are more obvious and can be identified by a peak finding  
function
following the useful advise of Carl Witthoft. I have written the  
following


for(i in length(data$Phase)){
newphase=if(abs(data$Phase[i+1]-data$Phase[i])6){
data$Phase[i+1]
}else{data$Phase[i]
}
}

I get the following error which I have not seen before when I paste  
the code

into R

Error in if (abs(data$Phase[i + 1] - data$Phase[i])  6) { :
 missing value where TRUE/FALSE needed

I don't have much experience with such loops as I have tried to  
avoid using

them in the past. Can anyone identify the error(s) in the code I have
written or a simpler means of writing such a filter?


Sometimes it's more informative to look at the data first. Here's a  
plot of the data with the first and second differences underneath


 plot(data, ylim=c(-5, max(data$Phase)) )
lines(data$Time[-1], diff(data$Phase) )
lines(data$Time[-(1:2)], diff(diff(data$Phase)), col=red)

Your data had rather flat-topped maxima. These maxima are defined by  
the  interval between the times when the first differences are zero  
(OR go from positive to negative)  AND the second differences are  
negative (OR zero).


There is a package on CRAN:

http://cran.r-project.org/web/packages/msProcess/index.html

  that purports to do peak finding. I would think the local maxima  
in you data might need some filtering and presumably the mass-spec  
people have need of that too.







Thank you,
Nate


data=
   Time Phase
1  0.000 15.18
2  0.017 13.42
3  0.034 11.40
4  0.051 18.31
5  0.068 25.23
6  0.085 33.92
7  0.102 42.86
8  0.119 42.87
9  0.136 42.88
10 0.153 42.88
11 0.170 42.87
12 0.186 42.88
13 0.203 42.88
14 0.220 42.78
15 0.237 33.50
16 0.254 24.81
17 0.271 17.20
18 0.288 10.39
19 0.305 13.97
20 0.322 16.48
21 0.339 14.75
22 0.356 20.80
23 0.373 25.79
24 0.390 31.25
25 0.407 39.89
26 0.423 40.04
27 0.440 40.05
28 0.457 40.05
29 0.474 40.05
30 0.491 40.05
31 0.508 40.06
32 0.525 40.07
33 0.542 32.23
34 0.559 23.90
35 0.576 17.86
36 0.592 11.63
37 0.609 12.78
38 0.626 13.12
39 0.643 10.93
40 0.660 10.63
41 0.677 10.82
42 0.694 11.84
43 0.711 20.44
44 0.728 27.33
45 0.745 34.22
46 0.762 41.55
47 0.779 41.55
48 0.796 41.55
49 0.813 41.53
50 0.830 41.53
51 0.847 41.52
52 0.864 41.52
53 0.880 41.53
54 0.897 41.53
55 0.914 33.07
56 0.931 25.12
57 0.948 19.25
58 0.965 11.30
59 0.982 12.48
60 0.999 13.85
61 1.016 13.62
62 1.033 12.62
63 1.050 19.39
64 1.067 25.48
65 1.084 31.06
66 1.101 39.49
67 1.118 39.48
68 1.135 39.46
69 1.152 39.45
70 1.169 39.43
71 1.185 39.42
72 1.202 39.42
73 1.219 39.41
74 1.236 39.41
75 1.253 37.39
76 1.270 29.03
77 1.287 20.61
78 1.304 14.07
79 1.321  9.12

[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


David Winsemius, MD
West Hartford, CT

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Error in combined for() and if() code

2010-12-28 Thread Nathan Miller
Hi all,

I haven't solved the problem of filtering the data, but I have managed to
find all the peaks in the data despite their relatively flat nature using
peaks() in the IDPmisc package. It works really well for my data and the
ability to set a lower threshold for peaks to report is convenient as well.

Maybe I'll came back to the data filtering problem later.

Thanks for your help and comments,
Nate

On Tue, Dec 28, 2010 at 10:49 AM, David Winsemius dwinsem...@comcast.netwrote:


 On Dec 28, 2010, at 1:08 PM, Nathan Miller wrote:

  Hello,

 I am trying to filter a data set like below so that the peaks in the Phase
 value are more obvious and can be identified by a peak finding function
 following the useful advise of Carl Witthoft. I have written the following

 for(i in length(data$Phase)){
 newphase=if(abs(data$Phase[i+1]-data$Phase[i])6){
 data$Phase[i+1]
 }else{data$Phase[i]
 }
 }

 I get the following error which I have not seen before when I paste the
 code
 into R

 Error in if (abs(data$Phase[i + 1] - data$Phase[i])  6) { :
  missing value where TRUE/FALSE needed

 I don't have much experience with such loops as I have tried to avoid
 using
 them in the past. Can anyone identify the error(s) in the code I have
 written or a simpler means of writing such a filter?


 Sometimes it's more informative to look at the data first. Here's a plot of
 the data with the first and second differences underneath

  plot(data, ylim=c(-5, max(data$Phase)) )
 lines(data$Time[-1], diff(data$Phase) )
 lines(data$Time[-(1:2)], diff(diff(data$Phase)), col=red)

 Your data had rather flat-topped maxima. These maxima are defined by the
  interval between the times when the first differences are zero (OR go from
 positive to negative)  AND the second differences are negative (OR zero).

 There is a package on CRAN:

 http://cran.r-project.org/web/packages/msProcess/index.html

   that purports to do peak finding. I would think the local maxima in
 you data might need some filtering and presumably the mass-spec people have
 need of that too.





 Thank you,
 Nate


 data=
   Time Phase
 1  0.000 15.18
 2  0.017 13.42
 3  0.034 11.40
 4  0.051 18.31
 5  0.068 25.23
 6  0.085 33.92
 7  0.102 42.86
 8  0.119 42.87
 9  0.136 42.88
 10 0.153 42.88
 11 0.170 42.87
 12 0.186 42.88
 13 0.203 42.88
 14 0.220 42.78
 15 0.237 33.50
 16 0.254 24.81
 17 0.271 17.20
 18 0.288 10.39
 19 0.305 13.97
 20 0.322 16.48
 21 0.339 14.75
 22 0.356 20.80
 23 0.373 25.79
 24 0.390 31.25
 25 0.407 39.89
 26 0.423 40.04
 27 0.440 40.05
 28 0.457 40.05
 29 0.474 40.05
 30 0.491 40.05
 31 0.508 40.06
 32 0.525 40.07
 33 0.542 32.23
 34 0.559 23.90
 35 0.576 17.86
 36 0.592 11.63
 37 0.609 12.78
 38 0.626 13.12
 39 0.643 10.93
 40 0.660 10.63
 41 0.677 10.82
 42 0.694 11.84
 43 0.711 20.44
 44 0.728 27.33
 45 0.745 34.22
 46 0.762 41.55
 47 0.779 41.55
 48 0.796 41.55
 49 0.813 41.53
 50 0.830 41.53
 51 0.847 41.52
 52 0.864 41.52
 53 0.880 41.53
 54 0.897 41.53
 55 0.914 33.07
 56 0.931 25.12
 57 0.948 19.25
 58 0.965 11.30
 59 0.982 12.48
 60 0.999 13.85
 61 1.016 13.62
 62 1.033 12.62
 63 1.050 19.39
 64 1.067 25.48
 65 1.084 31.06
 66 1.101 39.49
 67 1.118 39.48
 68 1.135 39.46
 69 1.152 39.45
 70 1.169 39.43
 71 1.185 39.42
 72 1.202 39.42
 73 1.219 39.41
 74 1.236 39.41
 75 1.253 37.39
 76 1.270 29.03
 77 1.287 20.61
 78 1.304 14.07
 79 1.321  9.12

[[alternative HTML version deleted]]

 __
 R-help@r-project.org mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide
 http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.


 David Winsemius, MD
 West Hartford, CT



[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.