[R] by gives no results, gives warning that data are non-numeric, but the data appears to be numeric.
Rolf Turner
r.turner at auckland.ac.nz
Mon Dec 28 04:39:55 CET 2015
You are trying to take the mean of data frames. There is no
"data.frame" method for mean().
Try:
by(hold,Arm,function(x){sapply(x,mean)})
BTW what's the point of "na.rm=TRUE" in your call? There are no missing
values in the data that you present.
In future, please use dput() to present your data; it makes life a lot
easier for respondents.
cheers,
Rolf
--
Technical Editor ANZJS
Department of Statistics
University of Auckland
Phone: +64-9-373-7599 ext. 88276
On 28/12/15 15:55, John Sorkin wrote:
> When I run by, I get an error message and no results. Any help in understanding what is wrong would be appreciated.
>
> Error message:
> Warning messages:
> 1: In mean.default(data[x, , drop = FALSE], ...) :
> argument is not numeric or logical: returning NA
> 2: In mean.default(data[x, , drop = FALSE], ...) :
> argument is not numeric or logical: returning NA
>
>
> Results:
> Arm: MUFA
> [1] NA
> -----------------------------------------------------------------------------------------------------------------------
> Arm: PUFA
> [1] NA
>
> Code:
> by(hold,Arm,mean,na.rm=TRUE)
>
> I don't understand why I am getting the error message, and why I am not getting any results. I don't believe my data are non-numeric.
>
> BY str works fine and confirms that the data are numeric
>> by(hold,Arm,str)
> 'data.frame': 23 obs. of 3 variables:
> $ Wtscr: num 97.2 103.9 58.2 130.9 135 ...
> $ Wt0 : num 96.2 106.1 56.7 127.4 133.1 ...
> $ Wt6 : num 93.8 101.7 55.5 127.6 130.9 ...
> 'data.frame': 16 obs. of 3 variables:
> $ Wtscr: num 120.2 104.6 100.1 74.8 112.6 ...
> $ Wt0 : num 117.2 105.3 99.5 75.7 110.7 ...
> $ Wt6 : num 114.6 104.8 84.5 77.7 107.4 ...
> Here is a listing of my data:
>> hold
> Wtscr Wt0 Wt6
> 1 120.2 117.2 114.60
> 2 104.6 105.3 104.80
> 3 97.2 96.2 93.80
> 4 103.9 106.1 101.70
> 5 58.2 56.7 55.50
> 6 130.9 127.4 127.60
> 7 135.0 133.1 130.90
> 8 100.1 99.5 84.50
> 9 130.3 115.3 115.80
> 10 150.5 148.7 133.40
> 11 74.8 75.7 77.70
> 12 112.6 110.7 107.40
> 13 90.0 91.0 83.40
> 14 139.1 138.5 126.70
> 15 99.1 96.4 95.70
> 16 108.3 107.5 109.30
> 17 75.1 72.9 72.20
> 18 97.5 102.1 98.50
> 19 202.2 90.1 90.60
> 20 91.7 89.4 93.40
> 21 102.1 102.2 100.80
> 22 116.9 118.9 118.00
> 23 94.6 95.3 90.30
> 24 122.2 117.0 117.00
> 25 105.6 103.3 103.60
> 26 96.9 96.8 98.80
> 27 102.9 100.3 89.00
> 28 115.8 118.5 117.30
> 29 95.7 96.2 95.40
> 30 88.2 86.9 88.30
> 31 108.7 108.8 108.80
> 32 89.2 88.6 81.20
> 33 86.8 86.5 82.70
> 34 135.5 130.1 125.40
> 35 112.5 113.9 111.45
> 36 111.0 105.3 109.50
> 37 103.4 100.5 95.50
> 38 117.6 117.4 101.40
> 39 116.7 118.5 101.80
>
> The INDEX is clearly a factor:
>> Arm
> [1] PUFA PUFA MUFA MUFA MUFA MUFA MUFA PUFA MUFA MUFA PUFA PUFA PUFA MUFA MUFA PUFA PUFA PUFA MUFA MUFA MUFA MUFA MUFA PUFA MUFA MUFA PUFA MUFA PUFA MUFA PUFA
> [32] MUFA MUFA MUFA MUFA MUFA PUFA PUFA PUFA
> Levels: MUFA PUFA
>
> The data and the index have the same length:
>> cbind(hold,Arm)
> Wtscr Wt0 Wt6 Arm
> 1 120.2 117.2 114.60 PUFA
> 2 104.6 105.3 104.80 PUFA
> 3 97.2 96.2 93.80 MUFA
> 4 103.9 106.1 101.70 MUFA
> 5 58.2 56.7 55.50 MUFA
> 6 130.9 127.4 127.60 MUFA
> 7 135.0 133.1 130.90 MUFA
> 8 100.1 99.5 84.50 PUFA
> 9 130.3 115.3 115.80 MUFA
> 10 150.5 148.7 133.40 MUFA
> 11 74.8 75.7 77.70 PUFA
> 12 112.6 110.7 107.40 PUFA
> 13 90.0 91.0 83.40 PUFA
> 14 139.1 138.5 126.70 MUFA
> 15 99.1 96.4 95.70 MUFA
> 16 108.3 107.5 109.30 PUFA
> 17 75.1 72.9 72.20 PUFA
> 18 97.5 102.1 98.50 PUFA
> 19 202.2 90.1 90.60 MUFA
> 20 91.7 89.4 93.40 MUFA
> 21 102.1 102.2 100.80 MUFA
> 22 116.9 118.9 118.00 MUFA
> 23 94.6 95.3 90.30 MUFA
> 24 122.2 117.0 117.00 PUFA
> 25 105.6 103.3 103.60 MUFA
> 26 96.9 96.8 98.80 MUFA
> 27 102.9 100.3 89.00 PUFA
> 28 115.8 118.5 117.30 MUFA
> 29 95.7 96.2 95.40 PUFA
> 30 88.2 86.9 88.30 MUFA
> 31 108.7 108.8 108.80 PUFA
> 32 89.2 88.6 81.20 MUFA
> 33 86.8 86.5 82.70 MUFA
> 34 135.5 130.1 125.40 MUFA
> 35 112.5 113.9 111.45 MUFA
> 36 111.0 105.3 109.50 MUFA
> 37 103.4 100.5 95.50 PUFA
> 38 117.6 117.4 101.40 PUFA
> 39 116.7 118.5 101.80 PUFA
>
> But the by function does not work!
>> by(hold,Arm,mean,na.rm=TRUE)
> Arm: MUFA
> [1] NA
> -----------------------------------------------------------------------------------------------------------------------
> Arm: PUFA
> [1] NA
> Warning messages:
> 1: In mean.default(data[x, , drop = FALSE], ...) :
> argument is not numeric or logical: returning NA
> 2: In mean.default(data[x, , drop = FALSE], ...) :
> argument is not numeric or logical: returning NA
>
>
> Perhaps this is a hint, print does not give two separate group:
>> by(hold,Arm,print)
> Wtscr Wt0 Wt6
> 3 97.2 96.2 93.80
> 4 103.9 106.1 101.70
> 5 58.2 56.7 55.50
> 6 130.9 127.4 127.60
> 7 135.0 133.1 130.90
> 9 130.3 115.3 115.80
> 10 150.5 148.7 133.40
> 14 139.1 138.5 126.70
> 15 99.1 96.4 95.70
> 19 202.2 90.1 90.60
> 20 91.7 89.4 93.40
> 21 102.1 102.2 100.80
> 22 116.9 118.9 118.00
> 23 94.6 95.3 90.30
> 25 105.6 103.3 103.60
> 26 96.9 96.8 98.80
> 28 115.8 118.5 117.30
> 30 88.2 86.9 88.30
> 32 89.2 88.6 81.20
> 33 86.8 86.5 82.70
> 34 135.5 130.1 125.40
> 35 112.5 113.9 111.45
> 36 111.0 105.3 109.50
> Wtscr Wt0 Wt6
> 1 120.2 117.2 114.6
> 2 104.6 105.3 104.8
> 8 100.1 99.5 84.5
> 11 74.8 75.7 77.7
> 12 112.6 110.7 107.4
> 13 90.0 91.0 83.4
> 16 108.3 107.5 109.3
> 17 75.1 72.9 72.2
> 18 97.5 102.1 98.5
> 24 122.2 117.0 117.0
> 27 102.9 100.3 89.0
> 29 95.7 96.2 95.4
> 31 108.7 108.8 108.8
> 37 103.4 100.5 95.5
> 38 117.6 117.4 101.4
> 39 116.7 118.5 101.8
> Arm: MUFA
> Wtscr Wt0 Wt6
> 3 97.2 96.2 93.80
> 4 103.9 106.1 101.70
> 5 58.2 56.7 55.50
> 6 130.9 127.4 127.60
> 7 135.0 133.1 130.90
> 9 130.3 115.3 115.80
> 10 150.5 148.7 133.40
> 14 139.1 138.5 126.70
> 15 99.1 96.4 95.70
> 19 202.2 90.1 90.60
> 20 91.7 89.4 93.40
> 21 102.1 102.2 100.80
> 22 116.9 118.9 118.00
> 23 94.6 95.3 90.30
> 25 105.6 103.3 103.60
> 26 96.9 96.8 98.80
> 28 115.8 118.5 117.30
> 30 88.2 86.9 88.30
> 32 89.2 88.6 81.20
> 33 86.8 86.5 82.70
> 34 135.5 130.1 125.40
> 35 112.5 113.9 111.45
> 36 111.0 105.3 109.50
> -----------------------------------------------------------------------------------------------------------------------
> Arm: PUFA
> Wtscr Wt0 Wt6
> 1 120.2 117.2 114.6
> 2 104.6 105.3 104.8
> 8 100.1 99.5 84.5
> 11 74.8 75.7 77.7
> 12 112.6 110.7 107.4
> 13 90.0 91.0 83.4
> 16 108.3 107.5 109.3
> 17 75.1 72.9 72.2
> 18 97.5 102.1 98.5
> 24 122.2 117.0 117.0
> 27 102.9 100.3 89.0
> 29 95.7 96.2 95.4
> 31 108.7 108.8 108.8
> 37 103.4 100.5 95.5
> 38 117.6 117.4 101.4
> 39 116.7 118.5 101.8
>
> But summary works as expected, giving two groups of results!
>> by(hold,Arm,summary)
> Arm: MUFA
> Wtscr Wt0 Wt6
> Min. : 58.20 Min. : 56.7 Min. : 55.5
> 1st Qu.: 95.75 1st Qu.: 92.7 1st Qu.: 92.0
> Median :105.60 Median :103.3 Median :101.7
> Mean :112.75 Mean :106.3 Mean :104.0
> 3rd Qu.:130.60 3rd Qu.:118.7 3rd Qu.:117.7
> Max. :202.20 Max. :148.7 Max. :133.4
> -----------------------------------------------------------------------------------------------------------------------
> Arm: PUFA
> Wtscr Wt0 Wt6
> Min. : 74.80 Min. : 72.90 Min. : 72.20
> 1st Qu.: 97.05 1st Qu.: 98.67 1st Qu.: 87.88
> Median :104.00 Median :103.70 Median : 99.95
> Mean :103.15 Mean :102.54 Mean : 97.58
> 3rd Qu.:113.62 3rd Qu.:112.28 3rd Qu.:107.75
> Max. :122.20 Max. :118.50 Max. :117.00
>
> BY also shows that there are no NAs in the data, and the BY works properly.
>> by(hold,Arm,is.na)
> Arm: MUFA
> Wtscr
More information about the R-help
mailing list