I noticed that sometimes I get errors in my R scripts when I forget checking whether the dataframe I’m working on is actually empty (has zero rows).
For example, when I used apply like this
apply(X=DF,MARGIN=1,FUN=function(row) !any(vec[ row[["start"]]:row[["end"]] ]))
and DF happened to be empty, I got an error about the subscripts.
Why is that? Aren’t empty dataframes valid? Why does apply() with MARGIN=1 even try to do anything when there are no rows in the dataframe? Do I really need to add a condition before each such apply to make sure the dataframe isn’t empty?
Thank you!
On a side note: apply always accesses the function you use at least once. If the input is a dataframe without any rows but with defined variables, it sends “FALSE” as an argument to the function. If the dataframe is completely empty, it sends a logical(0) to the function.
So as Joshua already told you, either control before the apply whether the dataframe has rows, or add a condition in the function within the apply.
EDIT :
This means you should take into account that length(x)==0 is not a very good check, you need to check whether either length(x==0) or !x is TRUE if both possibilities could arise :
(Code taken from Joshua)