[Robast-commits] r521 - in branches/robast-0.9/pkg/RobAStBase: . R man
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Wed Sep 19 14:15:29 CEST 2012
Author: ruckdeschel
Date: 2012-09-19 14:15:29 +0200 (Wed, 19 Sep 2012)
New Revision: 521
Added:
branches/robast-0.9/pkg/RobAStBase/man/samplesize-methods.Rd
Removed:
branches/robast-0.9/pkg/RobAStBase/R/.directory
Modified:
branches/robast-0.9/pkg/RobAStBase/DESCRIPTION
branches/robast-0.9/pkg/RobAStBase/NAMESPACE
branches/robast-0.9/pkg/RobAStBase/R/AllClass.R
branches/robast-0.9/pkg/RobAStBase/R/ddPlot.R
branches/robast-0.9/pkg/RobAStBase/R/ddPlot_utils.R
branches/robast-0.9/pkg/RobAStBase/R/outlyingPlot.R
branches/robast-0.9/pkg/RobAStBase/man/ddPlot-methods.Rd
branches/robast-0.9/pkg/RobAStBase/man/internals_ddPlot.Rd
branches/robast-0.9/pkg/RobAStBase/man/interpolRisk-class.Rd
branches/robast-0.9/pkg/RobAStBase/man/outlyingPlotIC.Rd
Log:
einige modifizierte Dateien committed
Modified: branches/robast-0.9/pkg/RobAStBase/DESCRIPTION
===================================================================
--- branches/robast-0.9/pkg/RobAStBase/DESCRIPTION 2012-09-18 08:17:15 UTC (rev 520)
+++ branches/robast-0.9/pkg/RobAStBase/DESCRIPTION 2012-09-19 12:15:29 UTC (rev 521)
@@ -3,7 +3,7 @@
Date: 2012-06-05
Title: Robust Asymptotic Statistics
Description: Base S4-classes and functions for robust asymptotic statistics.
-Depends: R(>= 2.12.0), methods, distr(>= 2.0), distrEx(>= 2.0), distrMod(>= 2.0), RandVar(>=
+Depends: R(>= 2.12.0), methods, rrcov, distr(>= 2.0), distrEx(>= 2.0), distrMod(>= 2.0), RandVar(>=
0.6.3)
Suggests: ROptEst
Author: Matthias Kohl, Peter Ruckdeschel
Modified: branches/robast-0.9/pkg/RobAStBase/NAMESPACE
===================================================================
--- branches/robast-0.9/pkg/RobAStBase/NAMESPACE 2012-09-18 08:17:15 UTC (rev 520)
+++ branches/robast-0.9/pkg/RobAStBase/NAMESPACE 2012-09-19 12:15:29 UTC (rev 521)
@@ -1,4 +1,5 @@
import("methods")
+import("rrcov")
import("distr")
import("distrEx")
import("distrMod")
Deleted: branches/robast-0.9/pkg/RobAStBase/R/.directory
===================================================================
--- branches/robast-0.9/pkg/RobAStBase/R/.directory 2012-09-18 08:17:15 UTC (rev 520)
+++ branches/robast-0.9/pkg/RobAStBase/R/.directory 2012-09-19 12:15:29 UTC (rev 521)
@@ -1,8 +0,0 @@
-[Dolphin]
-AdditionalInfo=3
-SortOrder=1
-Timestamp=2012,9,6,17,33,40
-ViewMode=1
-
-[Settings]
-ShowDotFiles=true
Modified: branches/robast-0.9/pkg/RobAStBase/R/AllClass.R
===================================================================
--- branches/robast-0.9/pkg/RobAStBase/R/AllClass.R 2012-09-18 08:17:15 UTC (rev 520)
+++ branches/robast-0.9/pkg/RobAStBase/R/AllClass.R 2012-09-19 12:15:29 UTC (rev 521)
@@ -318,7 +318,7 @@
# new risk classes
#################################################
setClass("interpolRisk", representation = representation(samplesize="numeric"),
- contains = c("RiskType", "VIRTUAL"))
-setClass("OMSRRisk", contains = "interpolRisk", prototype(samplesize=100))
-setClass("RMXRRisk", contains = "interpolRisk", prototype(samplesize=100))
-setClass("MBRRisk", contains = "interpolRisk", prototype(samplesize=100))
+ contains = c("VIRTUAL", "RiskType"))
+setClass("OMSRRisk", contains = "interpolRisk", prototype=prototype(type=".OMSE", samplesize=100))
+setClass("RMXRRisk", contains = "interpolRisk", prototype=prototype(type=".RMXE", samplesize=100))
+setClass("MBRRisk", contains = "interpolRisk", prototype=prototype(type=".MBRE",samplesize=100))
Modified: branches/robast-0.9/pkg/RobAStBase/R/ddPlot.R
===================================================================
--- branches/robast-0.9/pkg/RobAStBase/R/ddPlot.R 2012-09-18 08:17:15 UTC (rev 520)
+++ branches/robast-0.9/pkg/RobAStBase/R/ddPlot.R 2012-09-19 12:15:29 UTC (rev 521)
@@ -4,7 +4,15 @@
cutoff.quantile.x = 0.95, cutoff.quantile.y = cutoff.quantile.x,
transform.x, transform.y = transform.x,
id.n, lab.pts, adj, cex.idn,
- col.idn, lty.cutoff, lwd.cutoff, col.cutoff,jitt.fac){
+ col.idn, lty.cutoff, lwd.cutoff, col.cutoff, text.abline = TRUE,
+ text.abline.x = NULL, text.abline.y = NULL,
+ cex.abline = par("cex"), col.abline = col.cutoff,
+ font.abline = par("font"), adj.abline = c(0,0),
+ text.abline.x.x = NULL, text.abline.x.y = NULL,
+ text.abline.y.x = NULL, text.abline.y.y = NULL,
+ text.abline.x.fmt.cx = "%7.2f", text.abline.x.fmt.qx = "%4.2f%%",
+ text.abline.y.fmt.cy = "%7.2f", text.abline.y.fmt.qy = "%4.2f%%",
+ jitt.fac){
mc <- as.list(match.call(expand.dots = TRUE,
call = sys.call(sys.parent(1)))[-1])
mc$data <- data
@@ -17,7 +25,15 @@
cutoff.quantile.x = 0.95, cutoff.quantile.y = cutoff.quantile.x,
transform.x, transform.y = transform.x,
id.n, lab.pts, adj, cex.idn,
- col.idn, lty.cutoff, lwd.cutoff, col.cutoff,jitt.fac){
+ col.idn, lty.cutoff, lwd.cutoff, col.cutoff, text.abline = TRUE,
+ text.abline.x = NULL, text.abline.y = NULL,
+ cex.abline = par("cex"), col.abline = col.cutoff,
+ font.abline = par("font"), adj.abline = c(0,0),
+ text.abline.x.x = NULL, text.abline.x.y = NULL,
+ text.abline.y.x = NULL, text.abline.y.y = NULL,
+ text.abline.x.fmt.cx = "%7.2f", text.abline.x.fmt.qx = "%4.2f%%",
+ text.abline.y.fmt.cy = "%7.2f", text.abline.y.fmt.qy = "%4.2f%%",
+ jitt.fac){
mc <- match.call(call = sys.call(sys.parent(1)))
mc$data <- t(as.matrix(data))
@@ -30,7 +46,16 @@
cutoff.quantile.x = 0.95, cutoff.quantile.y = cutoff.quantile.x,
transform.x, transform.y = transform.x,
id.n, lab.pts, adj, cex.idn,
- col.idn, lty.cutoff, lwd.cutoff, col.cutoff,jitt.fac){
+ col.idn, lty.cutoff, lwd.cutoff, col.cutoff,
+ text.abline = TRUE,
+ text.abline.x = NULL, text.abline.y = NULL,
+ cex.abline = par("cex"), col.abline = col.cutoff,
+ font.abline = par("font"), adj.abline = c(0,0),
+ text.abline.x.x = NULL, text.abline.x.y = NULL,
+ text.abline.y.x = NULL, text.abline.y.y = NULL,
+ text.abline.x.fmt.cx = "%7.2f", text.abline.x.fmt.qx = "%4.2f%%",
+ text.abline.y.fmt.cy = "%7.2f", text.abline.y.fmt.qy = "%4.2f%%",
+ jitt.fac){
mc <- match.call(call = sys.call(sys.parent(1)))
mc$data <- matrix(data,nrow=1)
Modified: branches/robast-0.9/pkg/RobAStBase/R/ddPlot_utils.R
===================================================================
--- branches/robast-0.9/pkg/RobAStBase/R/ddPlot_utils.R 2012-09-18 08:17:15 UTC (rev 520)
+++ branches/robast-0.9/pkg/RobAStBase/R/ddPlot_utils.R 2012-09-19 12:15:29 UTC (rev 521)
@@ -1,20 +1,32 @@
-.ddPlot.MatNtNtCoCo <- function(data, ...,
+.presubs <- distr:::.presubs
+
+.ddPlot.MatNtNtCoCo <- function(data, ...,
dist.x = NormType(),
dist.y = NormType(),
cutoff.x = cutoff(norm = dist.x, cutoff.quantile = cutoff.quantile.x),
cutoff.y = cutoff(norm = dist.y, cutoff.quantile = cutoff.quantile.y),
cutoff.quantile.x = 0.95,
cutoff.quantile.y = cutoff.quantile.x,
- transform.x,
+ transform.x,
transform.y = transform.x,
- id.n,
- lab.pts,
- adj =0,
+ id.n,
+ lab.pts,
+ adj =0,
cex.idn = 1,
- col.idn = par("col"),
+ col.idn = par("col"),
lty.cutoff,
- lwd.cutoff,
+ lwd.cutoff,
col.cutoff = "red",
+ text.abline = TRUE,
+ text.abline.x = NULL, text.abline.y = NULL,
+ cex.abline = par("cex"), col.abline = col.cutoff,
+ font.abline = par("font"), adj.abline = c(0,0),
+ text.abline.x.x = NULL, text.abline.x.y = NULL,
+ text.abline.y.x = NULL, text.abline.y.y = NULL,
+ text.abline.x.fmt.cx = "%7.2f",
+ text.abline.x.fmt.qx = "%4.2f%%",
+ text.abline.y.fmt.cy = "%7.2f",
+ text.abline.y.fmt.qy = "%4.2f%%",
jitt.fac = 10){
dots <- match.call(expand.dots = FALSE)$"..."
@@ -168,7 +180,8 @@
do.call(text, args = c(list(mid.x,co.y+5,paste(cutoff.quantile.x*100," %-cutoff = ",round(co.y,digits=2)))))
if(length(id.xy))
- do.call(text, args = c(list(jitter(ndata.x[id.xy],factor=50), jitter(ndata.y[id.xy],factor=50),
+ do.call(text, args = c(list(jitter(ndata.x[id.xy],factor=jitt.fac),
+ jitter(ndata.y[id.xy],factor=jitt.fac),
labels=lab.pts[id.xy]), tdots))
#axis(side=4)
axis(side=1)
Modified: branches/robast-0.9/pkg/RobAStBase/R/outlyingPlot.R
===================================================================
--- branches/robast-0.9/pkg/RobAStBase/R/outlyingPlot.R 2012-09-18 08:17:15 UTC (rev 520)
+++ branches/robast-0.9/pkg/RobAStBase/R/outlyingPlot.R 2012-09-19 12:15:29 UTC (rev 521)
@@ -1,7 +1,7 @@
outlyingPlotIC <- function(data,
IC.x,
- IC.y,
- dist.x,
+ IC.y = IC.x,
+ dist.x = NormType(),
dist.y,
cutoff.y = cutoff.chisq(),
cutoff.x = cutoff.sememp(),
@@ -25,8 +25,8 @@
){
mc <- as.list(match.call(expand.dots = FALSE))[-1]
dots <- mc$"..."
- if(is.null(mc$xlim)) mc$xlim <- TRUE
- if(is.null(mc$ylim)) mc$ylim <- TRUE
+ if(is.null(dots$xlim)) dots$xlim <- TRUE
+ if(is.null(dots$ylim)) dots$ylim <- TRUE
if(is.null(mc$cutoff.quantile.x)) mc$cutoff.quantile.x <- 0.95
if(is.null(mc$cutoff.quantile.y)) mc$cutoff.quantile.y <- cutoff.quantile.x
if(is.null(mc$cutoff.x)) mc$cutoff.x <- cutoff.sememp()
@@ -35,20 +35,27 @@
if(missing(data)) stop("Argument 'data' must be given as argument to 'outlyingPlot'")
if(missing(dist.y)){
- if(robCov.y){
- require(rrcov)
- evIC = evalIC(IC.y,as.matrix(data))
- asVar = solve(CovMcd(data.frame(evIC[1,],evIC[2,]),alpha=0.5)@cov)
- cat("\nRobust asVar:")
- print(asVar)}else{
- if("asCov" %in% names(Risks(IC.y)))
- if(is.matrix(Risks(IC.y)$asCov) || length(Risks(IC.y)$asCov) == 1)
- {asVar <- Risks(IC.y)$asCov
- cat("\nasVar",asVar)}
+ if(robCov.y){
+ evIC = evalIC(IC.y,as.matrix(data))
+ asVar = solve(getCov(CovMcd(data.frame(evIC[1,],evIC[2,]),alpha=0.5)))
+ cat("\n", sep="", gettext("Robust asVar"), ":\n")
+ print(asVar)
+ }else{
+ if("asCov" %in% names(Risks(IC.y)))
+ if(is.matrix(Risks(IC.y)$asCov) || length(Risks(IC.y)$asCov) == 1)
+ {asVar <- Risks(IC.y)$asCov
+ cat("\n", sep="", gettext("asVar"));# print("HHHH");
+ print(asVar)
+ }
else{asVar <- Risks(IC.y)$asCov$value
- cat("\nasVar",asVar)}
+ cat("\n", sep="", gettext("asVar"));#print("HHHH");
+ print(asVar)
+ }
else{asVar <- getRiskIC(IC.y, risk = asCov())$asCov$value
- cat("\nClassic asVar",asVar)}}
+ cat("\n", sep="", gettext("Classic asVar"));
+ # print("HHHH");
+ print(asVar)
+ }}
asVar <- PosSemDefSymmMatrix(solve(asVar))
mc$dist.y <- QFNorm(name = gettext("Mahalonobis-Norm"), QuadForm = asVar)
@@ -57,22 +64,31 @@
if(missing(dist.x)){
#mc$dist.x <- NormType()
if(robCov.x){
- require(rrcov)
evIC = evalIC(IC.x,as.matrix(data))
- asVar = CovMcd(data.frame(evIC[1,],evIC[2,]),alpha=0.5)@cov
- cat("\nRobust asVar:")
- print(asVar)}
+ asVar = getCov(CovMcd(data.frame(evIC[1,],evIC[2,]),alpha=0.5))
+ #cat("\nRobust asVar:") ;print("KKKKK")
+ #print(asVar)
+ }
else{
if("asCov" %in% names(Risks(IC.y)))
- if(is.matrix(Risks(IC.x)$asCov) || length(Risks(IC.y)$asCov) == 1)
+ if(is.matrix(Risks(IC.x)$asCov) || length(Risks(IC.y)$asCov) == 1)
{asVar <- Risks(IC.x)$asCov
- cat("\nasVar",asVar)}
- else
+ cat("\n", sep="", gettext("asVar"));
+ #print("KKKKK2");
+ print(asVar)
+ }
+ else
{asVar <- Risks(IC.x)$asCov$value
- cat("\nasVar",asVar)}
+ cat("\n", sep="", gettext("asVar"));
+ # print("KKKKK3");
+ print(asVar)
+ }
else
{asVar <- getRiskIC(IC.x, risk = asCov())$asCov$value
- cat("\nClassic asVar",asVar)}
+ cat("\n", sep="", gettext("Classic asVar"));
+ #print("KKKKK4");
+ print(asVar)
+ }
}
asVar <- PosSemDefSymmMatrix(solve(asVar))
Modified: branches/robast-0.9/pkg/RobAStBase/man/ddPlot-methods.Rd
===================================================================
--- branches/robast-0.9/pkg/RobAStBase/man/ddPlot-methods.Rd 2012-09-18 08:17:15 UTC (rev 520)
+++ branches/robast-0.9/pkg/RobAStBase/man/ddPlot-methods.Rd 2012-09-19 12:15:29 UTC (rev 521)
@@ -21,7 +21,8 @@
text.abline.x.x = NULL, text.abline.x.y = NULL,
text.abline.y.x = NULL, text.abline.y.y = NULL,
text.abline.x.fmt.cx = "\%7.2f", text.abline.x.fmt.qx = "\%4.2f\%\%",
- text.abline.y.fmt.cy = "\%7.2f", text.abline.y.fmt.qy = "\%4.2f\%\%")
+ text.abline.y.fmt.cy = "\%7.2f", text.abline.y.fmt.qy = "\%4.2f\%\%",
+ jitt.fac)
\S4method{ddPlot}{numeric}(data, dist.x = NormType(), dist.y = NormType(),
cutoff.x, cutoff.y, ...,
cutoff.quantile.x = 0.95, cutoff.quantile.y = cutoff.quantile.x,
@@ -34,7 +35,8 @@
text.abline.x.x = NULL, text.abline.x.y = NULL,
text.abline.y.x = NULL, text.abline.y.y = NULL,
text.abline.x.fmt.cx = "\%7.2f", text.abline.x.fmt.qx = "\%4.2f\%\%",
- text.abline.y.fmt.cy = "\%7.2f", text.abline.y.fmt.qy = "\%4.2f\%\%")
+ text.abline.y.fmt.cy = "\%7.2f", text.abline.y.fmt.qy = "\%4.2f\%\%",
+ jitt.fac)
\S4method{ddPlot}{data.frame}(data, dist.x = NormType(), dist.y = NormType(),
cutoff.x, cutoff.y, ...,
cutoff.quantile.x = 0.95, cutoff.quantile.y = cutoff.quantile.x,
@@ -47,7 +49,8 @@
text.abline.x.x = NULL, text.abline.x.y = NULL,
text.abline.y.x = NULL, text.abline.y.y = NULL,
text.abline.x.fmt.cx = "\%7.2f", text.abline.x.fmt.qx = "\%4.2f\%\%",
- text.abline.y.fmt.cy = "\%7.2f", text.abline.y.fmt.qy = "\%4.2f\%\%")
+ text.abline.y.fmt.cy = "\%7.2f", text.abline.y.fmt.qy = "\%4.2f\%\%",
+ jitt.fac)
}
\arguments{
\item{data}{data coercable to \code{matrix}; the data at which to produce the \code{ddPlot}.}
@@ -105,7 +108,8 @@
\item{text.abline.x.fmt.qx}{format string to format cutoff probability in label in x direction.}
\item{text.abline.y.fmt.cy}{format string to format the cutoff value in label in y direction.}
\item{text.abline.y.fmt.qy}{format string to format cutoff probability in label in y direction.}
-}
+ \item{jitt.fac}{factor for jittering, see \code{jitter};}
+ }
\details{
The \code{matrix}-method calls \code{.ddPlot.MatNtNtCoCo},
the \code{numeric}- and \code{data.frame}-methods coerce argument \code{data}
Modified: branches/robast-0.9/pkg/RobAStBase/man/internals_ddPlot.Rd
===================================================================
--- branches/robast-0.9/pkg/RobAStBase/man/internals_ddPlot.Rd 2012-09-18 08:17:15 UTC (rev 520)
+++ branches/robast-0.9/pkg/RobAStBase/man/internals_ddPlot.Rd 2012-09-19 12:15:29 UTC (rev 521)
@@ -22,7 +22,8 @@
text.abline.x.x = NULL, text.abline.x.y = NULL,
text.abline.y.x = NULL, text.abline.y.y = NULL,
text.abline.x.fmt.cx = "\%7.2f", text.abline.x.fmt.qx = "\%4.2f\%\%",
- text.abline.y.fmt.cy = "\%7.2f", text.abline.y.fmt.qy = "\%4.2f\%\%")
+ text.abline.y.fmt.cy = "\%7.2f", text.abline.y.fmt.qy = "\%4.2f\%\%",
+ jitt.fac)
}
\arguments{
\item{data}{data in \code{matrix} form (columns are observations; rows are variable
@@ -81,6 +82,7 @@
\item{text.abline.x.fmt.qx}{format string to format cutoff probability in label in x direction.}
\item{text.abline.y.fmt.cy}{format string to format the cutoff value in label in y direction.}
\item{text.abline.y.fmt.qy}{format string to format cutoff probability in label in y direction.}
+ \item{jitt.fac}{factor for jittering, see \code{jitter};}
}
\details{
Modified: branches/robast-0.9/pkg/RobAStBase/man/interpolRisk-class.Rd
===================================================================
--- branches/robast-0.9/pkg/RobAStBase/man/interpolRisk-class.Rd 2012-09-18 08:17:15 UTC (rev 520)
+++ branches/robast-0.9/pkg/RobAStBase/man/interpolRisk-class.Rd 2012-09-19 12:15:29 UTC (rev 521)
@@ -7,17 +7,15 @@
\alias{OMSRRisk}
\alias{RMXRRisk}
\alias{MBRRisk}
-\alias{samplesize}
-\alias{samplesize,interpolRisk-method}
-\alias{samplesize<-}
-\alias{samplesize<-,interpolRisk-method}
\usage{
MBRRisk(samplesize=100)
OMSRRisk(samplesize=100)
RMXRRisk(samplesize=100)
}
-
+\arguments{
+ \item{samplesize}{sample size at which to look at the risk.}
+}
\title{Interpolated Risks}
\description{Class of risks for which algorithms dispatch to speed-up algorithms}
\section{Objects from the Class}{\code{interpolRisk} is a virtual class: No objects may be created from it.
Modified: branches/robast-0.9/pkg/RobAStBase/man/outlyingPlotIC.Rd
===================================================================
--- branches/robast-0.9/pkg/RobAStBase/man/outlyingPlotIC.Rd 2012-09-18 08:17:15 UTC (rev 520)
+++ branches/robast-0.9/pkg/RobAStBase/man/outlyingPlotIC.Rd 2012-09-19 12:15:29 UTC (rev 521)
@@ -10,7 +10,9 @@
cutoff.quantile.y = cutoff.quantile.x,
id.n, lab.pts, adj, cex.idn,
col.idn, lty.cutoff, lwd.cutoff, col.cutoff,
- main = gettext("Outlyingness by means of a distance-distance plot")
+ robCov.x = TRUE, robCov.y = TRUE, tf.x = data, tf.y = data,
+ jitt.fac = 10,
+ main = gettext("Outlyingness \n by means of a distance-distance plot")
)
}
\arguments{
@@ -43,6 +45,17 @@
\code{\link[graphics]{abline}} for drawing the cutoff lines.}
\item{col.cutoff}{the corresponding \code{col} argument for
\code{\link[graphics]{abline}} for drawing the cutoff lines.}
+ \item{robCov.x}{shall x-distances be based on MCD, i.e.,
+ robust covariances (TRUE) or on classical covariance be used?}
+ \item{robCov.y}{shall y-distances be based on MCD, i.e.,
+ robust covariances (TRUE) or on classical covariance be used?}
+ \item{tf.x}{transformation for x axis: a function returning the
+ transformed x-coordinates when applied to the data;
+ by default identity.}
+ \item{tf.y}{transformation for y axis: a function returning the
+ transformed y-coordinates when applied to the data;
+ by default identity.}
+ \item{jitt.fac}{factor for jittering, see \code{\link{jitter}};}
\item{main}{the main title.}
}
\details{
Added: branches/robast-0.9/pkg/RobAStBase/man/samplesize-methods.Rd
===================================================================
--- branches/robast-0.9/pkg/RobAStBase/man/samplesize-methods.Rd (rev 0)
+++ branches/robast-0.9/pkg/RobAStBase/man/samplesize-methods.Rd 2012-09-19 12:15:29 UTC (rev 521)
@@ -0,0 +1,23 @@
+\name{samplesize-methods}
+\docType{methods}
+\alias{samplesize,interpolRisk-method}
+\alias{samplesize}
+\alias{samplesize<-,interpolRisk-method}
+\alias{samplesize<-}
+\title{Methods for Function samplesize in Package `RobAStBase'}
+\description{samplesize-methods}
+
+\section{Methods}{\describe{
+
+\item{samplesize}{\code{signature(object = "interpolrisk")}:
+ returns the slot \code{samplesize} of an object of class \code{"interpolrisk"}. }
+\item{samplesize<-}{\code{signature(object = "interpolrisk", value = "ANY")}:
+ modifies the slot \code{samplesize} of an object of class \code{"interpolrisk"}. }
+}}
+\examples{
+myrisk <- MBRRisk(samplesize=100)
+samplesize(myrisk)
+samplesize(myrisk) <- 20
+}
+\concept{risk}
+\keyword{classes}
More information about the Robast-commits
mailing list