Just checked. To get lapply to work for the both functions, I have to
convert the matrix M into a dataframe. Trying it with apply for the
matrix works perfectly fine. The missing x was the problem
So here my improved code.
require(Deducer) #Package for perm.t.test
c(rep("A", 5), rep("B", 5))->Faktor
matrix(rnorm(100, mean=20, sd=4), nrow=10, ncol=10)->M
colnames(M) <- c("species1","species2",
"species3","species4","species5","species6","species7","species8","species9",
"species10")
###Conventional T-Test to test for differences of each species per factor
as.data.frame(M)->M2
apply(
M, 2, function(x)
t.test(x~ Faktor)
)
lapply(
M2, function(x)
t.test(x~ Faktor)
)
#Both versions ork fine, either apply for the matrix or lapply for the
data-frame
###Trying it for perm.t.test without the helpful formular expression
lapply(
M2, function(x)
perm.t.test(subset(x, Faktor=="A"),
subset(x, Faktor=="B")))
#For the perm.t.test lapply works with a dataframe
apply(
M, 2, function(x)
perm.t.test(subset(x, Faktor=="A"),
subset(x, Faktor=="B")))
Thank you very much for your help,
Gunnar
Just a hunch I can't test from my phone, but in your final lapply you
are passing a function of x that has no x in it, so I wouldn't be
surprised if R was unhappy about that.
Change the latter M's to x and see if that helps.
Not likely. 'x' is a formal argument of the function. He's using
lapply on a matrix. lapply is generally used for lists. but in this
case it results in sending individual numbers one-by-one to that
function, They are them each being t.tested against a ten item vector.
Failure is the predictable outcome but he did not see fit to reproduce
the informative error message that told him there was a mismatch of
lengths.
He should use:
apply(M, 2, function(x)
t.test(x~ Faktor))
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.