[R] extracting numeric values returned when using the by function to run the acf function

Avi Gross @v|gro@@ @end|ng |rom ver|zon@net
Tue May 10 20:12:15 CEST 2022


John,
What is returned is a specialized list structure called a 'by" and getting the part you want out can be done sort of carefully and sometimes with a bit of trial and error as the contents are nested. You can use str(0 and other tools but this seems to work with care as you need [[]] not just [] to get the internal contents, not another list:
> byeby <- by(RecallSmall[1:4,"value"],RecallSmall[1:4,"ID"],acf,na.action=na.pass,plot=FALSE)

> result <- byeby[[1]]$acf
> print(result)
, , 1
      [,1][1,]  1.00[2,]  0.15[3,] -0.50[4,] -0.15
To make it a more normal vector rather than an array you might want to do this.
> result <- as.vector(result)

> result

[1]  1.00  0.15 -0.50 -0.15

Again, we discourage use of packages here for some reason but there are many alternatives to using by() that get around this issue by not producing a specialized class as output. 
And a review ofthe help page for by() shows you could have added simplify=TRUE to make a normal list as in:

by(RecallSmall[1:4,"value"],RecallSmall[1:4,"ID"],acf,na.action=na.pass,plot=FALSE, simplify=TRUE)


But it remains a nested list and getting the part you want in one long command line that works for me is:

by(RecallSmall[1:4,"value"],RecallSmall[1:4,"ID"],acf,na.action=na.pass,plot=FALSE, simplify=TRUE)[[1]]$acf[1:4]



-----Original Message-----
From: Sorkin, John <jsorkin using som.umaryland.edu>
To: r-help using r-project.org (r-help using r-project.org) <r-help using r-project.org>
Sent: Tue, May 10, 2022 1:29 pm
Subject: [R] extracting numeric values returned when using the by function to run the acf function

I am using the by function to run the acf function. Each run of the by function returns more information than I want. All I want is the four values that acf returns, which using the data below would be
1.00  0.15  -0.50  -0.15
How  can I isolate these four values from the output returned by the by function.

Sample code:

RecallSmall <- data.frame(ID=c(1,1,1,1),value=c(6,5,3,4))
cat("Here are the data\n")
RecallSmall
cat("All I want is autocorrerlations, e.g. 1.00  0.15 -0.50 -0.15 \n ")
# attempting to subset does not work at all
by(RecallSmall[1:4,"value"],RecallSmall[1:4,"ID"],acf,na.action=na.pass,plot=FALSE)$acf
# this gives me more than I want, not just the numeric results.
by(RecallSmall[1:4,"value"],RecallSmall[1:4,"ID"],acf,na.action=na.pass,plot=FALSE)

# For your reference, this is what the acf function returns
acf(RecallSmall[1:4,"value"],na.action=na.pass,plot=FALSE)
# For your reference, this is what the acf function returns when the output is subset
acf(RecallSmall[1:4,"value"],na.action=na.pass,plot=FALSE)Thank you, John

Thank you,
John









    [[alternative HTML version deleted]]

______________________________________________
R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
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.

	[[alternative HTML version deleted]]



More information about the R-help mailing list