5

Is it possible to apply function to list elements only if function applicable to element? For example

{1.2, 3, {2.3, 5.4}, null, "fff"}
Floor[%]

gives

{1, 3, {2, 5} ,Floor[null], Floor["fff"]}

but I would like to get

{1, 3, {2, 5} ,null, "fff"}

3 Answers3

4

It would be the combination of the comments of Szabolcs and David G. Stork

list = {1.2, 3, {2.3, 5.4}, null, "fff"};
f[x_?NumericQ] := Floor[x]; f[x_] := x; f /@ list;
MapAll[f, list]

{1, 3, {2, 5}, null, "fff"}

LCarvalho
  • 9,233
  • 4
  • 40
  • 96
4
ClearAll[f]
f = Floor@# /. Floor -> Identity &;

f@{1.2, 3, {2.3, 5.4}, null, "fff"}

{1, 3, {2, 5}, null, "fff"}

f@{1.2, 3, {2.3, "ff"}, null, "fff", Pi}

{1, 3, {2, "ff"}, null, "fff", 3}

If the function returns unevaluated when a 'non-applicable' input is passed, this approach is more convenient as it does not require detailed knowledge of the function's argument requirements.

ClearAll[h]
h[x_] := 500 /; PrimeQ[x]
h[x_] := 500 /; Divisible[x, 3]
h /@ Range[15] /. h -> Identity

{1, 500, 500, 4, 500, 500, 500, 8, 500, 10, 500, 500, 500, 14, 500}

StringLength /@ {"abcabc", "bcdbc", 234} /. StringLength -> Identity

Mathematica graphics
{6, 5, 234}

kglr
  • 394,356
  • 18
  • 477
  • 896
1
list = {1.2, 3, {2.3, "ff"}, null, "fff", Pi};

SetAttributes[floor, Listable]

floor[x_] := x /. a_?NumericQ :> Floor @ a

floor @ list

{1, 3, {2, "ff"}, null, "fff", 3}

eldo
  • 67,911
  • 5
  • 60
  • 168