How can I make assignment persist between sessions?Saving Mathematica kernel state?How to pass arguments between functionsFunction definition and delayed assignmentHow can I make Which format its output?Can the value of a variable be made to persist between front end sessions?How to make Piecewise continuousHow can I “save” a function?Variable assignment to a functionSave trained NetChain between Mathematica sessions?How can I use manipulate to control many functions with many variables?How can I see what Get restored?

Why do Australian milk farmers need to protest supermarkets' milk price?

Python if-else code style for reduced code for rounding floats

An inequality of matrix norm

In a future war, an old lady is trying to raise a boy but one of the weapons has made everyone deaf

Is it normal that my co-workers at a fitness company criticize my food choices?

Instead of Universal Basic Income, why not Universal Basic NEEDS?

Most cost effective thermostat setting: consistent temperature vs. lowest temperature possible

Recruiter wants very extensive technical details about all of my previous work

It's a yearly task, alright

How to read the value of this capacitor?

Define, (actually define) the "stability" and "energy" of a compound

What is the rarity of this homebrew magic staff?

How Could an Airship Be Repaired Mid-Flight

Employee lack of ownership

Should we release the security issues we found in our product as CVE or we can just update those on weekly release notes?

Why do passenger jet manufacturers design their planes with stall prevention systems?

What approach do we need to follow for projects without a test environment?

How to use deus ex machina safely?

Interplanetary conflict, some disease destroys the ability to understand or appreciate music

Is it true that good novels will automatically sell themselves on Amazon (and so on) and there is no need for one to waste time promoting?

How big is a MODIS 250m pixel in reality?

Is it possible to upcast ritual spells?

Do the common programs (for example: "ls", "cat") in Linux and BSD come from the same source code?

What should tie a collection of short-stories together?



How can I make assignment persist between sessions?


Saving Mathematica kernel state?How to pass arguments between functionsFunction definition and delayed assignmentHow can I make Which format its output?Can the value of a variable be made to persist between front end sessions?How to make Piecewise continuousHow can I “save” a function?Variable assignment to a functionSave trained NetChain between Mathematica sessions?How can I use manipulate to control many functions with many variables?How can I see what Get restored?













5












$begingroup$


Yesterday, I imported a large set of data into a Mathematica notebook and stored each imported list of numbers in a function. For example, I would map a lists like 10, 20, 30 to a function values as shown below



f[0] = 10, 20 30;
f[1] = 40, 50, 60;


With the lists stored in the functions I generated the below chat by writing



averageComparisonChart = 
BarChart[fpAverages, fpiAverages,
ChartLabels -> "FP Quicksort", "FP Insertion Quicksort",
Range[0, 160, 10],
AxesLabel -> HoldForm["Vector size"],
HoldForm["Execution time (ms)"],
PlotLabel -> HoldForm["Quicksort vs. Insertion sort"],
LabelStyle -> GrayLevel[0]]


which output



bar chart



Before going to bed, I saved my notebook and shut down my computer. Today, all my functions have been reset. For example inputing f[0] outputs f[0] rather than the previously assigned list 10, 20, 30.



Does anyone know what has caused this issue? How can loss of data be avoided in the future? Is there a better way to store lists than in functions? Is there a way to restore the values from yesterday?



Related Question



The accepted answer to this question provides a method for creating persistence of data between sessions.










share|improve this question









New contributor




K. Claesson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$







  • 1




    $begingroup$
    What exactly is the question? You seem to be aware of the fact that Mathematica does not save the kernel state together with the notebook (see linked question), which explains why your values are gone. In general, a notebook should contain everything needed to restore the kernel state (this means e.g. that you have to keep all definitions that are required in the notebook)
    $endgroup$
    – Lukas Lang
    16 hours ago







  • 1




    $begingroup$
    You may want to look at Iconize.
    $endgroup$
    – Carl Lange
    16 hours ago










  • $begingroup$
    @LukasLang I was not aware that Mathematica does not save the kernel until recently. The question is what the best wat to create persistence of data in Mathematica.
    $endgroup$
    – K. Claesson
    16 hours ago






  • 1




    $begingroup$
    Which way is best depends on your exact workflow and requirements, which you have not stated. For different options, look at the linked question (and questions linked there), Iconize (as suggested by @CarlLange), Put/Export and Get/Import.
    $endgroup$
    – Lukas Lang
    16 hours ago






  • 2




    $begingroup$
    @K.Claesson What other system do you know that saves the state on exit without any user intervention? Most systems can't even save the state at all. Those that can (like R) still require the user to do it explicitly. It is not a natural expectation that definitions would persist.
    $endgroup$
    – Szabolcs
    15 hours ago
















5












$begingroup$


Yesterday, I imported a large set of data into a Mathematica notebook and stored each imported list of numbers in a function. For example, I would map a lists like 10, 20, 30 to a function values as shown below



f[0] = 10, 20 30;
f[1] = 40, 50, 60;


With the lists stored in the functions I generated the below chat by writing



averageComparisonChart = 
BarChart[fpAverages, fpiAverages,
ChartLabels -> "FP Quicksort", "FP Insertion Quicksort",
Range[0, 160, 10],
AxesLabel -> HoldForm["Vector size"],
HoldForm["Execution time (ms)"],
PlotLabel -> HoldForm["Quicksort vs. Insertion sort"],
LabelStyle -> GrayLevel[0]]


which output



bar chart



Before going to bed, I saved my notebook and shut down my computer. Today, all my functions have been reset. For example inputing f[0] outputs f[0] rather than the previously assigned list 10, 20, 30.



Does anyone know what has caused this issue? How can loss of data be avoided in the future? Is there a better way to store lists than in functions? Is there a way to restore the values from yesterday?



Related Question



The accepted answer to this question provides a method for creating persistence of data between sessions.










share|improve this question









New contributor




K. Claesson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$







  • 1




    $begingroup$
    What exactly is the question? You seem to be aware of the fact that Mathematica does not save the kernel state together with the notebook (see linked question), which explains why your values are gone. In general, a notebook should contain everything needed to restore the kernel state (this means e.g. that you have to keep all definitions that are required in the notebook)
    $endgroup$
    – Lukas Lang
    16 hours ago







  • 1




    $begingroup$
    You may want to look at Iconize.
    $endgroup$
    – Carl Lange
    16 hours ago










  • $begingroup$
    @LukasLang I was not aware that Mathematica does not save the kernel until recently. The question is what the best wat to create persistence of data in Mathematica.
    $endgroup$
    – K. Claesson
    16 hours ago






  • 1




    $begingroup$
    Which way is best depends on your exact workflow and requirements, which you have not stated. For different options, look at the linked question (and questions linked there), Iconize (as suggested by @CarlLange), Put/Export and Get/Import.
    $endgroup$
    – Lukas Lang
    16 hours ago






  • 2




    $begingroup$
    @K.Claesson What other system do you know that saves the state on exit without any user intervention? Most systems can't even save the state at all. Those that can (like R) still require the user to do it explicitly. It is not a natural expectation that definitions would persist.
    $endgroup$
    – Szabolcs
    15 hours ago














5












5








5


1



$begingroup$


Yesterday, I imported a large set of data into a Mathematica notebook and stored each imported list of numbers in a function. For example, I would map a lists like 10, 20, 30 to a function values as shown below



f[0] = 10, 20 30;
f[1] = 40, 50, 60;


With the lists stored in the functions I generated the below chat by writing



averageComparisonChart = 
BarChart[fpAverages, fpiAverages,
ChartLabels -> "FP Quicksort", "FP Insertion Quicksort",
Range[0, 160, 10],
AxesLabel -> HoldForm["Vector size"],
HoldForm["Execution time (ms)"],
PlotLabel -> HoldForm["Quicksort vs. Insertion sort"],
LabelStyle -> GrayLevel[0]]


which output



bar chart



Before going to bed, I saved my notebook and shut down my computer. Today, all my functions have been reset. For example inputing f[0] outputs f[0] rather than the previously assigned list 10, 20, 30.



Does anyone know what has caused this issue? How can loss of data be avoided in the future? Is there a better way to store lists than in functions? Is there a way to restore the values from yesterday?



Related Question



The accepted answer to this question provides a method for creating persistence of data between sessions.










share|improve this question









New contributor




K. Claesson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$




Yesterday, I imported a large set of data into a Mathematica notebook and stored each imported list of numbers in a function. For example, I would map a lists like 10, 20, 30 to a function values as shown below



f[0] = 10, 20 30;
f[1] = 40, 50, 60;


With the lists stored in the functions I generated the below chat by writing



averageComparisonChart = 
BarChart[fpAverages, fpiAverages,
ChartLabels -> "FP Quicksort", "FP Insertion Quicksort",
Range[0, 160, 10],
AxesLabel -> HoldForm["Vector size"],
HoldForm["Execution time (ms)"],
PlotLabel -> HoldForm["Quicksort vs. Insertion sort"],
LabelStyle -> GrayLevel[0]]


which output



bar chart



Before going to bed, I saved my notebook and shut down my computer. Today, all my functions have been reset. For example inputing f[0] outputs f[0] rather than the previously assigned list 10, 20, 30.



Does anyone know what has caused this issue? How can loss of data be avoided in the future? Is there a better way to store lists than in functions? Is there a way to restore the values from yesterday?



Related Question



The accepted answer to this question provides a method for creating persistence of data between sessions.







functions variable-definitions persistence






share|improve this question









New contributor




K. Claesson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




K. Claesson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 10 hours ago









m_goldberg

87.6k872198




87.6k872198






New contributor




K. Claesson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 18 hours ago









K. ClaessonK. Claesson

284




284




New contributor




K. Claesson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





K. Claesson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






K. Claesson is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







  • 1




    $begingroup$
    What exactly is the question? You seem to be aware of the fact that Mathematica does not save the kernel state together with the notebook (see linked question), which explains why your values are gone. In general, a notebook should contain everything needed to restore the kernel state (this means e.g. that you have to keep all definitions that are required in the notebook)
    $endgroup$
    – Lukas Lang
    16 hours ago







  • 1




    $begingroup$
    You may want to look at Iconize.
    $endgroup$
    – Carl Lange
    16 hours ago










  • $begingroup$
    @LukasLang I was not aware that Mathematica does not save the kernel until recently. The question is what the best wat to create persistence of data in Mathematica.
    $endgroup$
    – K. Claesson
    16 hours ago






  • 1




    $begingroup$
    Which way is best depends on your exact workflow and requirements, which you have not stated. For different options, look at the linked question (and questions linked there), Iconize (as suggested by @CarlLange), Put/Export and Get/Import.
    $endgroup$
    – Lukas Lang
    16 hours ago






  • 2




    $begingroup$
    @K.Claesson What other system do you know that saves the state on exit without any user intervention? Most systems can't even save the state at all. Those that can (like R) still require the user to do it explicitly. It is not a natural expectation that definitions would persist.
    $endgroup$
    – Szabolcs
    15 hours ago













  • 1




    $begingroup$
    What exactly is the question? You seem to be aware of the fact that Mathematica does not save the kernel state together with the notebook (see linked question), which explains why your values are gone. In general, a notebook should contain everything needed to restore the kernel state (this means e.g. that you have to keep all definitions that are required in the notebook)
    $endgroup$
    – Lukas Lang
    16 hours ago







  • 1




    $begingroup$
    You may want to look at Iconize.
    $endgroup$
    – Carl Lange
    16 hours ago










  • $begingroup$
    @LukasLang I was not aware that Mathematica does not save the kernel until recently. The question is what the best wat to create persistence of data in Mathematica.
    $endgroup$
    – K. Claesson
    16 hours ago






  • 1




    $begingroup$
    Which way is best depends on your exact workflow and requirements, which you have not stated. For different options, look at the linked question (and questions linked there), Iconize (as suggested by @CarlLange), Put/Export and Get/Import.
    $endgroup$
    – Lukas Lang
    16 hours ago






  • 2




    $begingroup$
    @K.Claesson What other system do you know that saves the state on exit without any user intervention? Most systems can't even save the state at all. Those that can (like R) still require the user to do it explicitly. It is not a natural expectation that definitions would persist.
    $endgroup$
    – Szabolcs
    15 hours ago








1




1




$begingroup$
What exactly is the question? You seem to be aware of the fact that Mathematica does not save the kernel state together with the notebook (see linked question), which explains why your values are gone. In general, a notebook should contain everything needed to restore the kernel state (this means e.g. that you have to keep all definitions that are required in the notebook)
$endgroup$
– Lukas Lang
16 hours ago





$begingroup$
What exactly is the question? You seem to be aware of the fact that Mathematica does not save the kernel state together with the notebook (see linked question), which explains why your values are gone. In general, a notebook should contain everything needed to restore the kernel state (this means e.g. that you have to keep all definitions that are required in the notebook)
$endgroup$
– Lukas Lang
16 hours ago





1




1




$begingroup$
You may want to look at Iconize.
$endgroup$
– Carl Lange
16 hours ago




$begingroup$
You may want to look at Iconize.
$endgroup$
– Carl Lange
16 hours ago












$begingroup$
@LukasLang I was not aware that Mathematica does not save the kernel until recently. The question is what the best wat to create persistence of data in Mathematica.
$endgroup$
– K. Claesson
16 hours ago




$begingroup$
@LukasLang I was not aware that Mathematica does not save the kernel until recently. The question is what the best wat to create persistence of data in Mathematica.
$endgroup$
– K. Claesson
16 hours ago




1




1




$begingroup$
Which way is best depends on your exact workflow and requirements, which you have not stated. For different options, look at the linked question (and questions linked there), Iconize (as suggested by @CarlLange), Put/Export and Get/Import.
$endgroup$
– Lukas Lang
16 hours ago




$begingroup$
Which way is best depends on your exact workflow and requirements, which you have not stated. For different options, look at the linked question (and questions linked there), Iconize (as suggested by @CarlLange), Put/Export and Get/Import.
$endgroup$
– Lukas Lang
16 hours ago




2




2




$begingroup$
@K.Claesson What other system do you know that saves the state on exit without any user intervention? Most systems can't even save the state at all. Those that can (like R) still require the user to do it explicitly. It is not a natural expectation that definitions would persist.
$endgroup$
– Szabolcs
15 hours ago





$begingroup$
@K.Claesson What other system do you know that saves the state on exit without any user intervention? Most systems can't even save the state at all. Those that can (like R) still require the user to do it explicitly. It is not a natural expectation that definitions would persist.
$endgroup$
– Szabolcs
15 hours ago











2 Answers
2






active

oldest

votes


















8












$begingroup$

If you wrap your definitions in Once then their results will be remembered across sessions:



f[0] = Once[Print["a"]; 10, 20, 30, "Local"]


Here the printing and the numbers 10, 20, 30 are used instead of a lengthy calculation that you only want to do once and whose result you want to remember in the next session.



On the first execution, the above code prints "a" and assigns the numbers 10, 20, 30 to f[0]. On subsequent executions (even after you've closed Mathematica and come back and are reevaluating the notebook), the execution of the first argument of Once does not take place any more, so there is no printing, and only the remembered result 10, 20, 30 is directly assigned to f[0]. This speeds up the reprocessing on subsequent executions dramatically if the list 10, 20, 30 is replaced with something hard to compute.



With Once you don't need to save/restore semi-manually as some comments suggest with Save, DumpSave, Get. Instead, persistent storage operates transparently to cache what has been calculated before.



Once has more options: you can specify in which cache the persistent storage should be (in the front end session, or locally so that even when you close and reopen Mathematica it's still there) and how long it should persist.




Another way to create persistent objects is with PersistentValue, which is a bit lower-level than Once but basically the same mechanism.



How to get rid of persistent objects



A certain wariness with persistent storage is in order. But note that these Once definitions are associated with a hash of the expression executed as the first argument to Once, and not with where you're storing the result (as in f[0] in my example). In this sense I consider Once a safe and unconfusing technique to use; I haven't run into trouble with undesired cross-contamination of unconditionally persistent objects. No persistent storage will be consulted unless you explicitly wrap an expression in Once.



Nonetheless in practice I keep the persistent storage pool as clean as possible. As the documentation states, you can inspect the storage pool with



PersistentObjects["Hashes/Once/*"]



PersistentObject["Hashes/Once/BlVsTGCUwUI", PersistentLocation[..., Type:Local]],
PersistentObject["Hashes/Once/FziAfp1s_y2", PersistentLocation[..., Type:Local]]




and clean it with



DeleteObject[%]





share|improve this answer











$endgroup$












  • $begingroup$
    Do you use this in practice? It feels a bit dangerous to make definitions unconditionally persistent ... Could you add the command to reset these definitions (in case someone messes up their Mathematica and needs a way to revert it)?
    $endgroup$
    – Szabolcs
    13 hours ago










  • $begingroup$
    @Szabolcs yes I agree, see my edit. Thanks for bringing this up, it was a hurdle for me to get started too.
    $endgroup$
    – Roman
    10 hours ago


















5












$begingroup$

Like in all other systems I am familiar with, variable and function definitions exist in memory (RAM) only and do not persist across sessions.



If you want a definition to persist, you must save it explicitly. See Save and DumpSave.



However, what I recommend for cases like yours is not to store such data in DownValue definitions. Store them in a data structure that is easy to serialize, then save them to a file. So, instead of f[1]=a; f[2]=b; f[3]=c use a list a,b,c. If the indices are not contiguous, you can use a SparseArray or Association. You can save any data that is stored as a Mathematica expression into an MX file, which is the most practical and flexible format for short-term storage (not for archiving because of weak cross-version compatibility promises). For archiving or for exchange with other systems, consider JSON: any expression that consists of lists, associations, numbers and strings can be saved to JSON.






share|improve this answer











$endgroup$












    Your Answer





    StackExchange.ifUsing("editor", function ()
    return StackExchange.using("mathjaxEditing", function ()
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
    );
    );
    , "mathjax-editing");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "387"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );






    K. Claesson is a new contributor. Be nice, and check out our Code of Conduct.









    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f193301%2fhow-can-i-make-assignment-persist-between-sessions%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    8












    $begingroup$

    If you wrap your definitions in Once then their results will be remembered across sessions:



    f[0] = Once[Print["a"]; 10, 20, 30, "Local"]


    Here the printing and the numbers 10, 20, 30 are used instead of a lengthy calculation that you only want to do once and whose result you want to remember in the next session.



    On the first execution, the above code prints "a" and assigns the numbers 10, 20, 30 to f[0]. On subsequent executions (even after you've closed Mathematica and come back and are reevaluating the notebook), the execution of the first argument of Once does not take place any more, so there is no printing, and only the remembered result 10, 20, 30 is directly assigned to f[0]. This speeds up the reprocessing on subsequent executions dramatically if the list 10, 20, 30 is replaced with something hard to compute.



    With Once you don't need to save/restore semi-manually as some comments suggest with Save, DumpSave, Get. Instead, persistent storage operates transparently to cache what has been calculated before.



    Once has more options: you can specify in which cache the persistent storage should be (in the front end session, or locally so that even when you close and reopen Mathematica it's still there) and how long it should persist.




    Another way to create persistent objects is with PersistentValue, which is a bit lower-level than Once but basically the same mechanism.



    How to get rid of persistent objects



    A certain wariness with persistent storage is in order. But note that these Once definitions are associated with a hash of the expression executed as the first argument to Once, and not with where you're storing the result (as in f[0] in my example). In this sense I consider Once a safe and unconfusing technique to use; I haven't run into trouble with undesired cross-contamination of unconditionally persistent objects. No persistent storage will be consulted unless you explicitly wrap an expression in Once.



    Nonetheless in practice I keep the persistent storage pool as clean as possible. As the documentation states, you can inspect the storage pool with



    PersistentObjects["Hashes/Once/*"]



    PersistentObject["Hashes/Once/BlVsTGCUwUI", PersistentLocation[..., Type:Local]],
    PersistentObject["Hashes/Once/FziAfp1s_y2", PersistentLocation[..., Type:Local]]




    and clean it with



    DeleteObject[%]





    share|improve this answer











    $endgroup$












    • $begingroup$
      Do you use this in practice? It feels a bit dangerous to make definitions unconditionally persistent ... Could you add the command to reset these definitions (in case someone messes up their Mathematica and needs a way to revert it)?
      $endgroup$
      – Szabolcs
      13 hours ago










    • $begingroup$
      @Szabolcs yes I agree, see my edit. Thanks for bringing this up, it was a hurdle for me to get started too.
      $endgroup$
      – Roman
      10 hours ago















    8












    $begingroup$

    If you wrap your definitions in Once then their results will be remembered across sessions:



    f[0] = Once[Print["a"]; 10, 20, 30, "Local"]


    Here the printing and the numbers 10, 20, 30 are used instead of a lengthy calculation that you only want to do once and whose result you want to remember in the next session.



    On the first execution, the above code prints "a" and assigns the numbers 10, 20, 30 to f[0]. On subsequent executions (even after you've closed Mathematica and come back and are reevaluating the notebook), the execution of the first argument of Once does not take place any more, so there is no printing, and only the remembered result 10, 20, 30 is directly assigned to f[0]. This speeds up the reprocessing on subsequent executions dramatically if the list 10, 20, 30 is replaced with something hard to compute.



    With Once you don't need to save/restore semi-manually as some comments suggest with Save, DumpSave, Get. Instead, persistent storage operates transparently to cache what has been calculated before.



    Once has more options: you can specify in which cache the persistent storage should be (in the front end session, or locally so that even when you close and reopen Mathematica it's still there) and how long it should persist.




    Another way to create persistent objects is with PersistentValue, which is a bit lower-level than Once but basically the same mechanism.



    How to get rid of persistent objects



    A certain wariness with persistent storage is in order. But note that these Once definitions are associated with a hash of the expression executed as the first argument to Once, and not with where you're storing the result (as in f[0] in my example). In this sense I consider Once a safe and unconfusing technique to use; I haven't run into trouble with undesired cross-contamination of unconditionally persistent objects. No persistent storage will be consulted unless you explicitly wrap an expression in Once.



    Nonetheless in practice I keep the persistent storage pool as clean as possible. As the documentation states, you can inspect the storage pool with



    PersistentObjects["Hashes/Once/*"]



    PersistentObject["Hashes/Once/BlVsTGCUwUI", PersistentLocation[..., Type:Local]],
    PersistentObject["Hashes/Once/FziAfp1s_y2", PersistentLocation[..., Type:Local]]




    and clean it with



    DeleteObject[%]





    share|improve this answer











    $endgroup$












    • $begingroup$
      Do you use this in practice? It feels a bit dangerous to make definitions unconditionally persistent ... Could you add the command to reset these definitions (in case someone messes up their Mathematica and needs a way to revert it)?
      $endgroup$
      – Szabolcs
      13 hours ago










    • $begingroup$
      @Szabolcs yes I agree, see my edit. Thanks for bringing this up, it was a hurdle for me to get started too.
      $endgroup$
      – Roman
      10 hours ago













    8












    8








    8





    $begingroup$

    If you wrap your definitions in Once then their results will be remembered across sessions:



    f[0] = Once[Print["a"]; 10, 20, 30, "Local"]


    Here the printing and the numbers 10, 20, 30 are used instead of a lengthy calculation that you only want to do once and whose result you want to remember in the next session.



    On the first execution, the above code prints "a" and assigns the numbers 10, 20, 30 to f[0]. On subsequent executions (even after you've closed Mathematica and come back and are reevaluating the notebook), the execution of the first argument of Once does not take place any more, so there is no printing, and only the remembered result 10, 20, 30 is directly assigned to f[0]. This speeds up the reprocessing on subsequent executions dramatically if the list 10, 20, 30 is replaced with something hard to compute.



    With Once you don't need to save/restore semi-manually as some comments suggest with Save, DumpSave, Get. Instead, persistent storage operates transparently to cache what has been calculated before.



    Once has more options: you can specify in which cache the persistent storage should be (in the front end session, or locally so that even when you close and reopen Mathematica it's still there) and how long it should persist.




    Another way to create persistent objects is with PersistentValue, which is a bit lower-level than Once but basically the same mechanism.



    How to get rid of persistent objects



    A certain wariness with persistent storage is in order. But note that these Once definitions are associated with a hash of the expression executed as the first argument to Once, and not with where you're storing the result (as in f[0] in my example). In this sense I consider Once a safe and unconfusing technique to use; I haven't run into trouble with undesired cross-contamination of unconditionally persistent objects. No persistent storage will be consulted unless you explicitly wrap an expression in Once.



    Nonetheless in practice I keep the persistent storage pool as clean as possible. As the documentation states, you can inspect the storage pool with



    PersistentObjects["Hashes/Once/*"]



    PersistentObject["Hashes/Once/BlVsTGCUwUI", PersistentLocation[..., Type:Local]],
    PersistentObject["Hashes/Once/FziAfp1s_y2", PersistentLocation[..., Type:Local]]




    and clean it with



    DeleteObject[%]





    share|improve this answer











    $endgroup$



    If you wrap your definitions in Once then their results will be remembered across sessions:



    f[0] = Once[Print["a"]; 10, 20, 30, "Local"]


    Here the printing and the numbers 10, 20, 30 are used instead of a lengthy calculation that you only want to do once and whose result you want to remember in the next session.



    On the first execution, the above code prints "a" and assigns the numbers 10, 20, 30 to f[0]. On subsequent executions (even after you've closed Mathematica and come back and are reevaluating the notebook), the execution of the first argument of Once does not take place any more, so there is no printing, and only the remembered result 10, 20, 30 is directly assigned to f[0]. This speeds up the reprocessing on subsequent executions dramatically if the list 10, 20, 30 is replaced with something hard to compute.



    With Once you don't need to save/restore semi-manually as some comments suggest with Save, DumpSave, Get. Instead, persistent storage operates transparently to cache what has been calculated before.



    Once has more options: you can specify in which cache the persistent storage should be (in the front end session, or locally so that even when you close and reopen Mathematica it's still there) and how long it should persist.




    Another way to create persistent objects is with PersistentValue, which is a bit lower-level than Once but basically the same mechanism.



    How to get rid of persistent objects



    A certain wariness with persistent storage is in order. But note that these Once definitions are associated with a hash of the expression executed as the first argument to Once, and not with where you're storing the result (as in f[0] in my example). In this sense I consider Once a safe and unconfusing technique to use; I haven't run into trouble with undesired cross-contamination of unconditionally persistent objects. No persistent storage will be consulted unless you explicitly wrap an expression in Once.



    Nonetheless in practice I keep the persistent storage pool as clean as possible. As the documentation states, you can inspect the storage pool with



    PersistentObjects["Hashes/Once/*"]



    PersistentObject["Hashes/Once/BlVsTGCUwUI", PersistentLocation[..., Type:Local]],
    PersistentObject["Hashes/Once/FziAfp1s_y2", PersistentLocation[..., Type:Local]]




    and clean it with



    DeleteObject[%]






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited 10 hours ago









    m_goldberg

    87.6k872198




    87.6k872198










    answered 16 hours ago









    RomanRoman

    3,220718




    3,220718











    • $begingroup$
      Do you use this in practice? It feels a bit dangerous to make definitions unconditionally persistent ... Could you add the command to reset these definitions (in case someone messes up their Mathematica and needs a way to revert it)?
      $endgroup$
      – Szabolcs
      13 hours ago










    • $begingroup$
      @Szabolcs yes I agree, see my edit. Thanks for bringing this up, it was a hurdle for me to get started too.
      $endgroup$
      – Roman
      10 hours ago
















    • $begingroup$
      Do you use this in practice? It feels a bit dangerous to make definitions unconditionally persistent ... Could you add the command to reset these definitions (in case someone messes up their Mathematica and needs a way to revert it)?
      $endgroup$
      – Szabolcs
      13 hours ago










    • $begingroup$
      @Szabolcs yes I agree, see my edit. Thanks for bringing this up, it was a hurdle for me to get started too.
      $endgroup$
      – Roman
      10 hours ago















    $begingroup$
    Do you use this in practice? It feels a bit dangerous to make definitions unconditionally persistent ... Could you add the command to reset these definitions (in case someone messes up their Mathematica and needs a way to revert it)?
    $endgroup$
    – Szabolcs
    13 hours ago




    $begingroup$
    Do you use this in practice? It feels a bit dangerous to make definitions unconditionally persistent ... Could you add the command to reset these definitions (in case someone messes up their Mathematica and needs a way to revert it)?
    $endgroup$
    – Szabolcs
    13 hours ago












    $begingroup$
    @Szabolcs yes I agree, see my edit. Thanks for bringing this up, it was a hurdle for me to get started too.
    $endgroup$
    – Roman
    10 hours ago




    $begingroup$
    @Szabolcs yes I agree, see my edit. Thanks for bringing this up, it was a hurdle for me to get started too.
    $endgroup$
    – Roman
    10 hours ago











    5












    $begingroup$

    Like in all other systems I am familiar with, variable and function definitions exist in memory (RAM) only and do not persist across sessions.



    If you want a definition to persist, you must save it explicitly. See Save and DumpSave.



    However, what I recommend for cases like yours is not to store such data in DownValue definitions. Store them in a data structure that is easy to serialize, then save them to a file. So, instead of f[1]=a; f[2]=b; f[3]=c use a list a,b,c. If the indices are not contiguous, you can use a SparseArray or Association. You can save any data that is stored as a Mathematica expression into an MX file, which is the most practical and flexible format for short-term storage (not for archiving because of weak cross-version compatibility promises). For archiving or for exchange with other systems, consider JSON: any expression that consists of lists, associations, numbers and strings can be saved to JSON.






    share|improve this answer











    $endgroup$

















      5












      $begingroup$

      Like in all other systems I am familiar with, variable and function definitions exist in memory (RAM) only and do not persist across sessions.



      If you want a definition to persist, you must save it explicitly. See Save and DumpSave.



      However, what I recommend for cases like yours is not to store such data in DownValue definitions. Store them in a data structure that is easy to serialize, then save them to a file. So, instead of f[1]=a; f[2]=b; f[3]=c use a list a,b,c. If the indices are not contiguous, you can use a SparseArray or Association. You can save any data that is stored as a Mathematica expression into an MX file, which is the most practical and flexible format for short-term storage (not for archiving because of weak cross-version compatibility promises). For archiving or for exchange with other systems, consider JSON: any expression that consists of lists, associations, numbers and strings can be saved to JSON.






      share|improve this answer











      $endgroup$















        5












        5








        5





        $begingroup$

        Like in all other systems I am familiar with, variable and function definitions exist in memory (RAM) only and do not persist across sessions.



        If you want a definition to persist, you must save it explicitly. See Save and DumpSave.



        However, what I recommend for cases like yours is not to store such data in DownValue definitions. Store them in a data structure that is easy to serialize, then save them to a file. So, instead of f[1]=a; f[2]=b; f[3]=c use a list a,b,c. If the indices are not contiguous, you can use a SparseArray or Association. You can save any data that is stored as a Mathematica expression into an MX file, which is the most practical and flexible format for short-term storage (not for archiving because of weak cross-version compatibility promises). For archiving or for exchange with other systems, consider JSON: any expression that consists of lists, associations, numbers and strings can be saved to JSON.






        share|improve this answer











        $endgroup$



        Like in all other systems I am familiar with, variable and function definitions exist in memory (RAM) only and do not persist across sessions.



        If you want a definition to persist, you must save it explicitly. See Save and DumpSave.



        However, what I recommend for cases like yours is not to store such data in DownValue definitions. Store them in a data structure that is easy to serialize, then save them to a file. So, instead of f[1]=a; f[2]=b; f[3]=c use a list a,b,c. If the indices are not contiguous, you can use a SparseArray or Association. You can save any data that is stored as a Mathematica expression into an MX file, which is the most practical and flexible format for short-term storage (not for archiving because of weak cross-version compatibility promises). For archiving or for exchange with other systems, consider JSON: any expression that consists of lists, associations, numbers and strings can be saved to JSON.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited 14 hours ago

























        answered 15 hours ago









        SzabolcsSzabolcs

        162k14442941




        162k14442941




















            K. Claesson is a new contributor. Be nice, and check out our Code of Conduct.









            draft saved

            draft discarded


















            K. Claesson is a new contributor. Be nice, and check out our Code of Conduct.












            K. Claesson is a new contributor. Be nice, and check out our Code of Conduct.











            K. Claesson is a new contributor. Be nice, and check out our Code of Conduct.














            Thanks for contributing an answer to Mathematica Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            Use MathJax to format equations. MathJax reference.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f193301%2fhow-can-i-make-assignment-persist-between-sessions%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            How should I use the fbox command correctly to avoid producing a Bad Box message?How to put a long piece of text in a box?How to specify height and width of fboxIs there an arrayrulecolor-like command to change the rule color of fbox?What is the command to highlight bad boxes in pdf?Why does fbox sometimes place the box *over* the graphic image?how to put the text in the boxHow to create command for a box where text inside the box can automatically adjust?how can I make an fbox like command with certain color, shape and width of border?how to use fbox in align modeFbox increase the spacing between the box and it content (inner margin)how to change the box height of an equationWhat is the use of the hbox in a newcommand command?

            152 Atala Notae | Nexus externi | Tabula navigationis"Discovery Circumstances: Numbered Minor Planets"2000152Small-Body Database

            Doxepinum Nexus interni Notae | Tabula navigationis3158DB01142WHOa682390"Structural Analysis of the Histamine H1 Receptor""Transdermal and Topical Drug Administration in the Treatment of Pain""Antidepressants as antipruritic agents: A review"