Skip to content

Extracting Vectors from Lists of Lists Produced by Functions

3 messages · White, Charles E WRAIR-Wash DC, Sundar Dorai-Raj, J.R. Lockwood

#
If you found my subject heading to be confusing then I'm sure you'll enjoy
the example I've included below. I find the apply type functions to be
wonderful for avoiding loops but when I use them with existing functions, I
end up using loops anyway to extract the vectors I want. I would appreciate
it if someone could show me how to avoid these loops. Thanks.

EXAMPLE: 
noise<-matrix(data = rnorm(15, mean=0, sd=1), nrow = 5, ncol = 3,
              byrow = FALSE, dimnames = NULL)
measure<-apply(noise,2,t.test)
measure
tval<-NULL
df<-NULL
pval<-NULL
for (i in 1:length(measure)){
  tval[i]<-measure[[i]][[1]]
  df[i]<-measure[[i]][[2]]
  pval[i]<-measure[[i]][[3]]}
data.frame(tval,df,pval)

Charles E. White, Biostatistician
Walter Reed Army Institute of Research
503 Robert Grant Ave., Room 1w102
Silver Spring, MD 20910-1557
301 319-9781
WRAIR Home Page: http://wrair-www.army.mil/
#
White, Charles E WRAIR-Wash DC wrote:
Charles,

Use a data.frame and sapply instead.

sapply(as.data.frame(noise), function(x) t.test(x)[1:3])

Sundar
#
Dear Charles,

Since you are extracting vectors of the same length from each element
of the list, you can use "sapply"

"sapply(measure,function(x){x[1:3]})"

after which you can transpose, rename, make into a dataframe as
desired.

In general you would use "lapply" to apply a function to each element
of a list, resulting in new list.

best,

J.R. Lockwood
412-683-2300 x4941
lockwood at rand.org
http://www.rand.org/methodology/stat/members/lockwood/