int2Lfd <- function(m=0)
{
#INT2LFD converts a nonnegative integer to a linear differential
# operator object that is equivalent to D^m. The range of the
# functional data object in any cell is set to [0,1], and is
# not actually used when a linear differential operator object
# of this nature is applied.
# In the event that m is already a linear differential operator
# object, it returns the object immediately. Thus, INT2LFD can
# be used to screen whether an object is an integer or not.
# Last modified 17 September 2005
# check M
if (inherits(m, "Lfd")) {
Lfdobj <- m
return(Lfdobj)
}
if (!is.numeric(m))
stop("Argument not numeric and not a linear differential operator.")
if (length(m) != 1) stop("Argument is not a scalar.")
if (round(m) != m) stop("Argument is not an integer.")
if (m < 0) stop("Argument is negative.")
# all the checks passed, set up a functional data object
# The range will not be used in this case, and can be set
# to [0, 1]
# set up the list object for the homogeneous part
if (m==0) {
# if derivative is zero, BWTLIST is empty
bwtlist <- NULL
} else {
basisobj <- create.constant.basis(c(0,1))
bwtlist <- vector("list", m)
for (j in 1:m) bwtlist[[j]] <- fd(0, basisobj)
}
# define the Lfd object
Lfdobj <- Lfd(m, bwtlist)
return(Lfdobj)
}