# File infillxy.R
# Part of the hydroTSM R package, https://github.com/hzambran/hydroTSM ;
# https://CRAN.R-project.org/package=hydroTSM
# Copyright 2010-2017 Mauricio Zambrano-Bigiarini
# Distributed under GPL 2 or later
################################################################################
# 'infillxy' #
################################################################################
# Author : Mauricio Zambrano-Bigiarini #
################################################################################
# Fills in ALL the 'NA' values in 'x' with the corrensponding values in 'sim'. #
# Started: 16-Dic-2008 #
# Updates: 04-Sep-2009 #
################################################################################
#
# 'x' : 'data.frame' or 'matrix' in which some (observed) values are 'NA'
# 'sim' : 'data.frame' or 'matrix', with the same dimension of 'obs',
# that contains the values that will be used for filling in
# the 'NA' values in 'obs'
# Result: a 'data.frame' or 'matrix', with the same dimension of 'obs',
# without 'NA' values.
infillxy <-function(x,...) UseMethod("infillxy")
infillxy.default <- function(x, sim,...) {
if (length(x) != length(sim))
stop("'x' and 'sim' does not have the same dimension !!")
# vector with the index of all the elements in 'x' that are 'NA'
na.index <- which( is.na(x) )
# Replacing the 'NA' values in 'filled' by the correponding values in 'sim'
x[na.index] <- sim[na.index]
return(x)
} # 'infillxy.default' END
infillxy.matrix <- function(x, sim, ...) {
if ( !identical(dim(x), dim(sim) ) )
stop("'x' and 'sim' does not have the same dimension !!")
if (is.na(match(class(sim), c("matrix"))))
stop("Invalid argument: 'sim' must be of class 'matrix'")
# Creating a copy of the original observed values
z <- x
z[,1:ncol(z)] <- sapply(1:ncol(z), function(j,y) {
# Putting the monthly values in the output data.frame
# The first column of 'x' corresponds to the Year
z[,j] <- infillxy.default(x= y[,j], sim=sim[, j])
}, y = x) # sapply END
return(z)
} # 'infillxy.matrix' END
infillxy.data.frame <- function(x, sim, ...) {
x <- as.matrix(x)
sim <- as.matrix(sim)
NextMethod("infillxy.matrix")
} # 'infillxy.data.frame' END
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.