Luke, thank you so much - that solves my problem! Holger
On Wed, Feb 18, 2015 at 3:56 PM, <luke-tier...@uiowa.edu> wrote: > On Wed, 18 Feb 2015, Holger Hoefling wrote: > >> Hi Luke, >> >> Ah - I see - thank you! This at least points me to a way on how to >> "fix" this. I tried setting the srcref attribute to NULL, but the hash >> value is still different and so is the serialization. So this looks >> like it is one difference, but not all of them > > > when source attributes are attached they are attached to calls within > the body as well, so > > > attributes(body(testfun)) > $srcref > $srcref[[1]] > ... > >> Even if all differences were identified - it still leaves me with >> different behavior between interactive and batch-mode, though. I am >> curious as to why that is. Do you know why in interactive mode the >> attribute with the srcref is set, but not in batch mode? > > > I can't speak to why the default for the keep.source option is > different in the two cases, but you can set it to be the same: in > interactive mode > > > options(keep.source = FALSE) > > testfun <- function() {return(NULL)} > > digest(testfun) > [1] "b03160b9250f0d5b5bcce42bd86d8e56" > > Or use options(keep.source = TRUE) in the other case. > > Best, > > luke > > >> >> Thanks! >> >> Holger >> >> P.S. I attached the output I get when i set the attributes to NULL >> >> >> On Wed, Feb 18, 2015 at 3:04 PM, <luke-tier...@uiowa.edu> wrote: >>> >>> Add >>> >>> attributes(testfun) >>> >>> and you will see where the two functions differ. >>> >>> luke >>> >>> >>> On Wed, 18 Feb 2015, Holger Hoefling wrote: >>> >>>> Hi, >>>> >>>> I posted this question to the regular help list, but it seems to be >>>> this is probably a question that is better addressed on r-devel. Sorry >>>> for the double posting. >>>> >>>> I am using hash-values to cache certain results in R. This caching >>>> also depends on the hash-value of the function that is being cached >>>> (calculated using the digest package). I noticed that computations >>>> that should already be cached are recomputed when switching from an >>>> interactive session to a BATCH session. Therefore, I wrote a test >>>> script >>>> >>>> library(digest) >>>> testfun <- function() { >>>> return(NULL) >>>> } >>>> testval <- "testval" >>>> print(digest(testfun)) >>>> print(serialize(testfun, connection = NULL)) >>>> >>>> and executed it once using input-redirection from a file (testFile.R) >>>> and once copying the code into an interactive R session. The >>>> hash-values of the functions differ. As digest internally relies on >>>> serialize, I also checked there and found that digest is not the >>>> reason for the discrepancy. Instead, the serialized value of the >>>> function already differs between the BATCH and inteactive sessions. >>>> >>>> I was wondering if someone knows if >>>> 1. Is this a feature or a bug? It feels like a bug to me as all the >>>> inputs are identical, I would expect that the output is identical as >>>> well. Is there something I am overlooking? >>>> 2. Is there a way to get consistent hash-values for functions between >>>> BATCH and interactive sessions. >>>> >>>> The output from the BATCH and interactive runs are below (as well as >>>> sessionInfo) >>>> >>>> Thank you very much for your help! >>>> >>>> Holger Hoefling >>>> >>>> --------------------------------- >>>> BATCH run (via input redirection): >>>> >>>> $ R --vanilla < testFile.R >>>> >>>> R version 3.1.0 (2014-04-10) -- "Spring Dance" >>>> Copyright (C) 2014 The R Foundation for Statistical Computing >>>> Platform: x86_64-unknown-linux-gnu (64-bit) >>>> >>>> R is free software and comes with ABSOLUTELY NO WARRANTY. >>>> You are welcome to redistribute it under certain conditions. >>>> Type 'license()' or 'licence()' for distribution details. >>>> >>>> R is a collaborative project with many contributors. >>>> Type 'contributors()' for more information and >>>> 'citation()' on how to cite R or R packages in publications. >>>> >>>> Type 'demo()' for some demos, 'help()' for on-line help, or >>>> 'help.start()' for an HTML browser interface to help. >>>> Type 'q()' to quit R. >>>> >>>>> library(digest) >>>>> testfun <- function() { >>>> >>>> >>>> + return(NULL) >>>> + } >>>>> >>>>> >>>>> print(digest(testfun)) >>>> >>>> >>>> [1] "b03160b9250f0d5b5bcce42bd86d8e56" >>>>> >>>>> >>>>> print(serialize(testfun, connection = NULL)) >>>> >>>> >>>> [1] 58 0a 00 00 00 02 00 03 01 00 00 02 03 00 00 00 04 03 00 00 00 fd 00 >>>> 00 00 >>>> [26] fe 00 00 00 06 00 00 00 01 00 04 00 09 00 00 00 01 7b 00 00 00 02 >>>> 00 >>>> 00 00 >>>> [51] 06 00 00 00 01 00 04 00 09 00 00 00 06 72 65 74 75 72 6e 00 00 00 >>>> 02 >>>> 00 00 >>>> [76] 00 fe 00 00 00 fe 00 00 00 fe >>>>> >>>>> >>>>> sessionInfo() >>>> >>>> >>>> R version 3.1.0 (2014-04-10) >>>> Platform: x86_64-unknown-linux-gnu (64-bit) >>>> >>>> locale: >>>> [1] C >>>> >>>> attached base packages: >>>> [1] stats graphics grDevices utils datasets methods base >>>> >>>> other attached packages: >>>> [1] digest_0.6.4 >>>>> >>>>> >>>>> >>>> >>>> ---------------------------------------------- >>>> Interactive run: >>>> >>>> $ R --vanilla >>>> >>>> R version 3.1.0 (2014-04-10) -- "Spring Dance" >>>> Copyright (C) 2014 The R Foundation for Statistical Computing >>>> Platform: x86_64-unknown-linux-gnu (64-bit) >>>> >>>> R is free software and comes with ABSOLUTELY NO WARRANTY. >>>> You are welcome to redistribute it under certain conditions. >>>> Type 'license()' or 'licence()' for distribution details. >>>> >>>> R is a collaborative project with many contributors. >>>> Type 'contributors()' for more information and >>>> 'citation()' on how to cite R or R packages in publications. >>>> >>>> Type 'demo()' for some demos, 'help()' for on-line help, or >>>> 'help.start()' for an HTML browser interface to help. >>>> Type 'q()' to quit R. >>>> >>>>> library(digest) >>>>> testfun <- function() { >>>> >>>> >>>> + return(NULL) >>>> + } >>>>> >>>>> >>>>> print(digest(testfun)) >>>> >>>> >>>> [1] "fada482d2894088b079a8e56b7044862" >>>>> >>>>> >>>>> print(serialize(testfun, connection = NULL)) >>>> >>>> >>>> [1] 58 0a 00 00 00 02 00 03 01 00 00 02 03 00 00 00 06 03 00 00 04 02 >>>> 00 >>>> 00 00 >>>> [26] 01 00 04 00 09 00 00 00 06 73 72 63 72 65 66 00 00 03 0d 00 00 00 >>>> 08 >>>> 00 00 >>>> [51] 00 01 00 00 00 0c 00 00 00 03 00 00 00 01 00 00 00 0c 00 00 00 01 >>>> 00 >>>> 00 00 >>>> [76] 01 00 00 00 03 00 00 04 02 00 00 00 01 00 04 00 09 00 00 00 07 73 >>>> 72 >>>> 63 66 >>>> [101] 69 6c 65 00 00 00 04 00 00 00 00 00 00 00 f2 00 00 04 02 00 00 00 >>>> 01 >>>> 00 04 >>>> [126] 00 09 00 00 00 05 6c 69 6e 65 73 00 00 00 10 00 00 00 01 00 04 00 >>>> 09 >>>> 00 00 >>>> [151] 00 2b 74 65 73 74 66 75 6e 20 3c 2d 20 66 75 6e 63 74 69 6f 6e 28 >>>> 29 >>>> 20 7b >>>> [176] 0a 20 20 20 20 72 65 74 75 72 6e 28 4e 55 4c 4c 29 0a 7d 0a 00 00 >>>> 04 >>>> 02 00 >>>> [201] 00 00 01 00 04 00 09 00 00 00 08 66 69 6c 65 6e 61 6d 65 00 00 00 >>>> 10 >>>> 00 00 >>>> [226] 00 01 00 04 00 09 00 00 00 00 00 00 00 fe 00 00 00 fe 00 00 04 02 >>>> 00 >>>> 00 00 >>>> [251] 01 00 04 00 09 00 00 00 05 63 6c 61 73 73 00 00 00 10 00 00 00 02 >>>> 00 >>>> 04 00 >>>> [276] 09 00 00 00 0b 73 72 63 66 69 6c 65 63 6f 70 79 00 04 00 09 00 00 >>>> 00 >>>> 07 73 >>>> [301] 72 63 66 69 6c 65 00 00 00 fe 00 00 04 02 00 00 06 ff 00 00 00 10 >>>> 00 >>>> 00 00 >>>> [326] 01 00 04 00 09 00 00 00 06 73 72 63 72 65 66 00 00 00 fe 00 00 00 >>>> fe >>>> 00 00 >>>> [351] 00 fd 00 00 00 fe 00 00 02 06 00 00 04 02 00 00 01 ff 00 00 00 13 >>>> 00 >>>> 00 00 >>>> [376] 02 00 00 03 0d 00 00 00 08 00 00 00 01 00 00 00 17 00 00 00 01 00 >>>> 00 >>>> 00 17 >>>> [401] 00 00 00 17 00 00 00 17 00 00 00 01 00 00 00 01 00 00 04 02 00 00 >>>> 02 >>>> ff 00 >>>> [426] 00 03 ff 00 00 04 02 00 00 06 ff 00 00 00 10 00 00 00 01 00 04 00 >>>> 09 >>>> 00 00 >>>> [451] 00 06 73 72 63 72 65 66 00 00 00 fe 00 00 03 0d 00 00 00 08 00 00 >>>> 00 >>>> 02 00 >>>> [476] 00 00 05 00 00 00 02 00 00 00 10 00 00 00 05 00 00 00 10 00 00 00 >>>> 02 >>>> 00 00 >>>> [501] 00 02 00 00 04 02 00 00 02 ff 00 00 03 ff 00 00 04 02 00 00 06 ff >>>> 00 >>>> 00 00 >>>> [526] 10 00 00 00 01 00 04 00 09 00 00 00 06 73 72 63 72 65 66 00 00 00 >>>> fe >>>> 00 00 >>>> [551] 04 02 00 00 02 ff 00 00 03 ff 00 00 04 02 00 00 00 01 00 04 00 09 >>>> 00 >>>> 00 00 >>>> [576] 0b 77 68 6f 6c 65 53 72 63 72 65 66 00 00 03 0d 00 00 00 08 00 00 >>>> 00 >>>> 01 00 >>>> [601] 00 00 00 00 00 00 03 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 >>>> 01 >>>> 00 00 >>>> [626] 00 03 00 00 04 02 00 00 02 ff 00 00 03 ff 00 00 04 02 00 00 06 ff >>>> 00 >>>> 00 00 >>>> [651] 10 00 00 00 01 00 04 00 09 00 00 00 06 73 72 63 72 65 66 00 00 00 >>>> fe >>>> 00 00 >>>> [676] 00 fe 00 00 00 01 00 04 00 09 00 00 00 01 7b 00 00 00 02 00 00 00 >>>> 06 >>>> 00 00 >>>> [701] 00 01 00 04 00 09 00 00 00 06 72 65 74 75 72 6e 00 00 00 02 00 00 >>>> 00 >>>> fe 00 >>>> [726] 00 00 fe 00 00 00 fe >>>>> >>>>> >>>>> sessionInfo() >>>> >>>> >>>> R version 3.1.0 (2014-04-10) >>>> Platform: x86_64-unknown-linux-gnu (64-bit) >>>> >>>> locale: >>>> [1] C >>>> >>>> attached base packages: >>>> [1] stats graphics grDevices utils datasets methods base >>>> >>>> other attached packages: >>>> [1] digest_0.6.4 >>>>> >>>>> >>>>> >>>> >>>> ______________________________________________ >>>> R-devel@r-project.org mailing list >>>> https://stat.ethz.ch/mailman/listinfo/r-devel >>>> >>> >>> -- >>> Luke Tierney >>> Ralph E. Wareham Professor of Mathematical Sciences >>> University of Iowa Phone: 319-335-3386 >>> Department of Statistics and Fax: 319-335-3017 >>> Actuarial Science >>> 241 Schaeffer Hall email: luke-tier...@uiowa.edu >>> Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu >> >> > > -- > Luke Tierney > Ralph E. Wareham Professor of Mathematical Sciences > University of Iowa Phone: 319-335-3386 > Department of Statistics and Fax: 319-335-3017 > Actuarial Science > 241 Schaeffer Hall email: luke-tier...@uiowa.edu > Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel