Q:

Apply function to list elements only if applicable

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"}

A:

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"}

A:

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

  {6, 5, 234}

