html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue https://github.com/pydata/xarray/issues/2517#issuecomment-436062784,https://api.github.com/repos/pydata/xarray/issues/2517,436062784,MDEyOklzc3VlQ29tbWVudDQzNjA2Mjc4NA==,6153603,2018-11-05T22:40:46Z,2018-11-05T22:40:46Z,CONTRIBUTOR,"I think #2298 is what I'm really waiting for and would solve the use cases I listed above. I'll have no trouble using the accessor methods in the time being. Thanks, @shoyer","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,374460958 https://github.com/pydata/xarray/issues/2517#issuecomment-435532247,https://api.github.com/repos/pydata/xarray/issues/2517,435532247,MDEyOklzc3VlQ29tbWVudDQzNTUzMjI0Nw==,1217238,2018-11-02T22:54:19Z,2018-11-02T22:54:19Z,MEMBER,"I think the cleanest way to do this in the long term would be to combine some sort of ""lazy array"" object with caching, e.g., along the lines of what's described in https://github.com/pydata/xarray/issues/2298. I'm not sure what the best solution in the short-term is, though.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,374460958 https://github.com/pydata/xarray/issues/2517#issuecomment-434861750,https://api.github.com/repos/pydata/xarray/issues/2517,434861750,MDEyOklzc3VlQ29tbWVudDQzNDg2MTc1MA==,35968931,2018-10-31T21:56:11Z,2018-10-31T21:56:11Z,MEMBER,"That's true, but unless you start subclassing dataset then isn't that always going to be the case? You have some quantity which you can only calculate with either a function or an accessor method on the dataset, wouldn't you need to alter the `__getitem__` method on the dataset object (or some subclass of it) in order to get the behaviour you're describing?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,374460958 https://github.com/pydata/xarray/issues/2517#issuecomment-434857661,https://api.github.com/repos/pydata/xarray/issues/2517,434857661,MDEyOklzc3VlQ29tbWVudDQzNDg1NzY2MQ==,6153603,2018-10-31T21:40:46Z,2018-10-31T21:40:46Z,CONTRIBUTOR,"The only problem I see with this is that `actual.acc.altitude` must be called before `actual.altitude`, otherwise it will result in the data_var being used before it is created.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,374460958 https://github.com/pydata/xarray/issues/2517#issuecomment-434646452,https://api.github.com/repos/pydata/xarray/issues/2517,434646452,MDEyOklzc3VlQ29tbWVudDQzNDY0NjQ1Mg==,35968931,2018-10-31T11:05:18Z,2018-10-31T11:05:18Z,MEMBER,"If you want to return your newly-calculated altitude and also have it be a full data_var in your dataset, one way would be to just alter the original dataset in-place. Something like ```python import xarray as xr import pandas as pd import xarray.testing as xrt @xr.register_dataset_accessor('acc') class Accessor(object): def __init__(self, xarray_ds): self._ds = xarray_ds self._altitude = None @property def altitude(self): """""" An expensive calculation that results in data that not everyone needs. """""" if self._altitude is None: self._altitude = xr.DataArray([5, 10, 15, 20, 25], coords=[('time', self._ds.time)]) # Here we add the calculated altitude to the dataset as a new data variable self._ds['altitude'] = self._altitude # Return just the altitude dataarray return self._altitude expected = xr.Dataset({'data': (['time'], [100, 30, 10, 3, 1]), 'altitude': (['time'], [5, 10, 15, 20, 25])}, coords={'time': pd.date_range('2014-09-06', periods=5, freq='1s')}) actual = xr.Dataset({'data': (['time'], [100, 30, 10, 3, 1])}, coords={'time': pd.date_range('2014-09-06', periods=5, freq='1s')}) # Return newly-calculated altitude, but also store it in the actual dataset for later altitude = actual.acc.altitude # Check that worked xrt.assert_equal(actual, expected) xrt.assert_equal(actual['altitude'], actual.acc.altitude) ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,374460958