[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: trouble with refreshdata?
From: |
Ben Abbott |
Subject: |
Re: trouble with refreshdata? |
Date: |
Wed, 24 Mar 2010 07:58:54 -0400 |
On Mar 24, 2010, at 2:17 AM, Jaroslav Hajek wrote:
> On Tue, Mar 23, 2010 at 10:04 PM, Ben Abbott <address@hidden> wrote:
>> On Tuesday, March 23, 2010, at 04:04PM, "Ben Abbott" <address@hidden> wrote:
>>> On Tuesday, March 23, 2010, at 03:18PM, "John W. Eaton" <address@hidden>
>>> wrote:
>>>> On 22-Mar-2010, Ben Abbott wrote:
>>>>
>>>> | I have a rather recent build. I tried running the refreshdata demo, but
>>>> ...
>>>> |
>>>> | demo refreshdata
>>>> | refreshdata example 1:
>>>> | x = 0:0.1:10;
>>>> | y = sin (x);
>>>> | plot (x, y, "ydatasource", "y");
>>>> | for i = 1 : 100
>>>> | pause(0.1)
>>>> | y = sin (x + 0.1 * i);
>>>> | refreshdata(gcf(), "caller");
>>>> | endfor
>>>> |
>>>> | refreshdata example 1: failed
>>>> | cell2mat: elements must be numeric, char or logical
>>>> |
>>>> | Is anyone else seeing this?
>>>> |
>>>> | The error occurs at line 85.
>>>> |
>>>> | 79 for i = 1 : numel (h)
>>>> | 80 obj = get (h (i));
>>>> | 81 fldnames = fieldnames (obj);
>>>> | 82 m = regexpi (fieldnames(obj), "^.+datasource$", "match");
>>>> | 83 idx = cellfun (@(x) !isempty(x), m);
>>>> | 84 if (any (idx))
>>>> | 85 props = [props; {cell2mat(m(idx))}];
>>>> | 86 objs = [objs ; h(i)];
>>>> | 87 endif
>>>> | 88 endfor
>>>> |
>>>> | Ben
>>>>
>>>> Yes, I can duplicate this problem, but I don't knwo what the proper
>>>> solution is as I don't really understand what this code is trying to
>>>> do.
>>>>
>>>> Can you identify what changed so that this is now failing? Unless the
>>>> change was intentional, then maybe that is the real bug.
>>>>
>>>> jwe
>>>
>>> I'm also unfamiliar with this code, but I'll take a look as my time permits.
>>>
>>> If someone else has an idea what this code is trying to do, please let me
>>> know.
>>>
>>> Ben
>>>
>>
>> Ok, I think I see what changed. The changeset below changed how cell2mat
>> behaved when the input was a cell of cells.
>>
>> http://hg.savannah.gnu.org/hgweb/octave/rev/c0d0b6e37a36
>>
>> I made a trivial change to allow cell2mat to work for ...
>>
>> octave:1> cell2mat ({{1},{2},{3}})
>> ans =
>>
>> {
>> [1,1] = 1
>> [1,2] = 2
>> [1,3] = 3
>> }
>>
>> Is there any reason why this example should give an error?
>>
>> Ben
>
> It is true that Matlab (2007) doesn't allow this, neither seems the
> online docs imply so, but I really see no reason why this should not
> work. Cell arrays can be used as matrices in other contexts (num2cell,
> mat2cell), so I think they should work here. I apparently overlooked
> that this worked before.
>
> Matlab perhaps disallows this because it can lead to confusion whether
> it's cell concatenation or whether cell2mat should recurse into the
> nested arrays.
>
> I checked in the following change that allows this case again:
> http://hg.savannah.gnu.org/hgweb/octave/rev/03d0dea2309d
>
> no need to revert the previous fix, it actually improves things.
>
> regards
Perhaps a test?
Ben
changeset.patch
Description: Binary data