Skip to content

Commit 5fdcac5

Browse files
authored
Merge pull request #22 from boost-R/anisotropic_dflambda_mix
Mixing df and lambda arguments in baselearners combined with anisotropic %A0% and %Xa0%.
2 parents ef98b40 + 3981dde commit 5fdcac5

2 files changed

Lines changed: 59 additions & 42 deletions

File tree

R/constrainedX.R

Lines changed: 50 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -862,9 +862,7 @@ NULL
862862
args2 <- environment(bl2$dpp)$args
863863
l1 <- args1$lambda
864864
l2 <- args2$lambda
865-
if (xor(is.null(l1), is.null(l2)))
866-
stop("you cannot mix lambda and df in ",
867-
sQuote("%A0%"))
865+
868866
if (!is.null(l1) && !is.null(l2)) {
869867
### there is no common lambda!
870868
args <- list(lambda = NA, df = NA)
@@ -877,27 +875,35 @@ NULL
877875
args <- list(lambda = NULL,
878876
df = ifelse(is.null(df1), 1, df1) *
879877
ifelse(is.null(df2), 1, df2))
880-
881-
## case that df equals nr columns of design matrix -> no penalty -> lambda = 0
882-
if( ncol(environment(bl1$dpp)$X) - df1 < .Machine$double.eps*10^10){
883-
args$lambda1 <- 0
884-
if( ncol(environment(bl1$dpp)$X) - df1 < - .Machine$double.eps*10^10){
885-
warning("Specified df in ", bl1$get_call(), " are higher than the number of columns, ",
886-
"which is ", ncol(environment(bl1$dpp)$X), ".")
878+
879+
if(!is.null(l1)) {
880+
args$lambda1 <- l1
881+
} else {
882+
## case that df equals nr columns of design matrix -> no penalty -> lambda = 0
883+
if( ncol(environment(bl1$dpp)$X) - df1 < .Machine$double.eps*10^10){
884+
args$lambda1 <- 0
885+
if( ncol(environment(bl1$dpp)$X) - df1 < - .Machine$double.eps*10^10){
886+
warning("Specified df in ", bl1$get_call(), " are higher than the number of columns, ",
887+
"which is ", ncol(environment(bl1$dpp)$X), ".")
888+
}
889+
}else{
890+
args$lambda1 <- 1
887891
}
888-
}else{
889-
args$lambda1 <- 1
890892
}
891893

892-
## case that df equals nr columns of design matrix
893-
if( ncol(environment(bl2$dpp)$X) - df2 < .Machine$double.eps*10^10){
894-
args$lambda2 <- 0
895-
if( ncol(environment(bl2$dpp)$X) - df2 < - .Machine$double.eps*10^10){
896-
warning("Specified df in ", bl2$get_call(), " are higher than the number of columns, ",
897-
"which is ", ncol(environment(bl2$dpp)$X), ".")
894+
if(!is.null(l2)) {
895+
args$lambda2 <- l2
896+
} else {
897+
## case that df equals nr columns of design matrix
898+
if( ncol(environment(bl2$dpp)$X) - df2 < .Machine$double.eps*10^10){
899+
args$lambda2 <- 0
900+
if( ncol(environment(bl2$dpp)$X) - df2 < - .Machine$double.eps*10^10){
901+
warning("Specified df in ", bl2$get_call(), " are higher than the number of columns, ",
902+
"which is ", ncol(environment(bl2$dpp)$X), ".")
903+
}
904+
}else{
905+
args$lambda2 <- 1
898906
}
899-
}else{
900-
args$lambda2 <- 1
901907
}
902908

903909
if(args$lambda1 != 0 & args$lambda2 != 0)
@@ -1021,10 +1027,6 @@ NULL
10211027
l1 <- args1$lambda
10221028
l2 <- args2$lambda
10231029

1024-
if (xor(is.null(l1), is.null(l2)))
1025-
stop("you cannot mix lambda and df in ",
1026-
sQuote("%Xa0%"))
1027-
10281030
if (!is.null(l1) && !is.null(l2)) {
10291031
args <- list(lambda = 1, df = NULL)
10301032

@@ -1037,27 +1039,34 @@ NULL
10371039
args <- list(lambda = NULL,
10381040
df = ifelse(is.null(df1), 1, df1) *
10391041
ifelse(is.null(df2), 1, df2))
1040-
1041-
## case that df equals nr columns of design matrix -> no penalty -> lambda = 0
1042-
if( ncol(environment(bl1$dpp)$X) - df1 < .Machine$double.eps*10^10){
1043-
args$lambda1 <- 0
1044-
if( ncol(environment(bl1$dpp)$X) - df1 < - .Machine$double.eps*10^10){
1045-
warning("Specified df in ", bl1$get_call(), " are higher than the number of columns, ",
1046-
"which is ", ncol(environment(bl1$dpp)$X), ".")
1042+
if(!is.null(l1)) {
1043+
args$lambda1 <- l1
1044+
} else {
1045+
## case that df equals nr columns of design matrix -> no penalty -> lambda = 0
1046+
if( ncol(environment(bl1$dpp)$X) - df1 < .Machine$double.eps*10^10){
1047+
args$lambda1 <- 0
1048+
if( ncol(environment(bl1$dpp)$X) - df1 < - .Machine$double.eps*10^10){
1049+
warning("Specified df in ", bl1$get_call(), " are higher than the number of columns, ",
1050+
"which is ", ncol(environment(bl1$dpp)$X), ".")
1051+
}
1052+
}else{
1053+
args$lambda1 <- 1
10471054
}
1048-
}else{
1049-
args$lambda1 <- 1
10501055
}
10511056

1052-
## case that df equals nr columns of design matrix
1053-
if( ncol(environment(bl2$dpp)$X) - df2 < .Machine$double.eps*10^10){
1054-
args$lambda2 <- 0
1055-
if( ncol(environment(bl2$dpp)$X) - df2 < - .Machine$double.eps*10^10){
1056-
warning("Specified df in ", bl2$get_call(), " are higher than the number of columns, ",
1057-
"which is ", ncol(environment(bl2$dpp)$X), ".")
1057+
if(!is.null(l2)) {
1058+
args$lambda2 <- l2
1059+
} else {
1060+
## case that df equals nr columns of design matrix
1061+
if( ncol(environment(bl2$dpp)$X) - df2 < .Machine$double.eps*10^10){
1062+
args$lambda2 <- 0
1063+
if( ncol(environment(bl2$dpp)$X) - df2 < - .Machine$double.eps*10^10){
1064+
warning("Specified df in ", bl2$get_call(), " are higher than the number of columns, ",
1065+
"which is ", ncol(environment(bl2$dpp)$X), ".")
1066+
}
1067+
}else{
1068+
args$lambda2 <- 1
10581069
}
1059-
}else{
1060-
args$lambda2 <- 1
10611070
}
10621071

10631072
if(args$lambda1 != 0 & args$lambda2 != 0)

inst/NEWS.Rd

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
\name{NEWS}
22
\title{News for Package 'FDboost'}
33

4-
\section{Changes in FDboost version 1.0-1 (2021-10-25)}{
4+
5+
\section{Changes in FDboost version 1.1-0 (2022-07-12)}{
6+
\subsection{Miscellaneous}{
7+
\itemize{
8+
\item Anisotropic tensor-product operators \code{b1 \%A0\% b2} and \code{b1 \%Xa0\% b2} now
9+
also working when \code{lambda} is specified for \code{b1} and \code{df} is specified for \code{b2}
10+
(or vice versa).
11+
}
12+
}
513
\subsection{New feature}{
614
\itemize{
715
\item New function \code{clr} to compute the centered-log-ratio transform and its

0 commit comments

Comments
 (0)