5

Is it possible to use "if" in arrayfun like the following in Octave?

a = [ 1 2; 3 4];
arrayfun(@(x) if x>=2 1 else 0 end,  a)

And Octave complains:

>>> arrayfun(@(x) if x>=2 1 else 0 end, a)
                                     ^

Is if clause allowed in arrayfun?

2 Answers 2

6

In Octave you can't use if/else statements in an inline or anonymous function in the normal way. You can define your function in it's own file or as a subfunction like this:

function a = testIf(x)
     if x>=2
        a = 1;
     else 
        a = 0;
     end
 end

and call arrayfun like this:

arrayfun(@testIf,a)
ans =

   0   1
   1   1

Or you can use this work around with an inline function:

iif = @(varargin) varargin{2 * find([varargin{1:2:end}], 1, ...
                                     'first')}();

arrayfun(iif, a >= 2, 1, true, 0)
ans =

   0   1
   1   1

There's more information here.

Sign up to request clarification or add additional context in comments.

Comments

4

In MATLAB you don't need an if statement for the problem that you describe. In fact it is really simple to use arrayfun:

arrayfun(@(x) x>=2,  a)

My guess is that it works in Octave as well.

Note that you don't actually need arrayfun in this case at all:

x>=2

Should do the trick here.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.