Holger, For me (see session info) using
digest(as.list(f)) gets around this problem. ~G > sessionInfo() R version 3.1.0 (2014-04-10) Platform: x86_64-pc-linux-gnu (64-bit) locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=en_US.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] digest_0.6.8 On Wed, Feb 18, 2015 at 6:22 AM, Holger Hoefling <hhoef...@gmail.com> 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 > > 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? > > 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 > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > > -- Gabriel Becker, PhD Computational Biologist Bioinformatics and Computational Biology Genentech, Inc. [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel