Ng Stanley
2008-Feb-05 07:21 UTC
[R] Warnings from apply "longer object length is not a multiple of shorter object length"
Hi,
What was I doing wrong, such that B) gave warning messages ? I want the
computation of thr to be outside the apply function.
A) Uses a simple matrix of 9 elements. No warning messages.
data2_1 <- matrix (c(1,2,3,NA,4,5,NA,NA,6), 3,3)
mean <- colMeans(data2_1, na.rm = TRUE)
sd <- sd(data2_1, na.rm = TRUE)
for (i in 1:2) {
thr <- mean + i*sd
num <- apply(data2_1, 2, function(x) {
temp <- thr
sum(x > (temp), na.rm = TRUE)})
}
B) Replace data2_1 with a larger matrix, gives 20 warning messages i.e., In
x > (temp) : = longer object length is not a multiple of shorter object
length
data2_1 <- matrix(c(0.9584190, 0.2710325, -0.9495618, -0.1301772, -0.7539687,
0.5344464, -0.8205933, 0.1581723, -0.5351588, 0.04448065, 0.9936430,
0.2278786, -0.8160700, -0.3314779, -0.4047975, 0.1168152, -0.7458182, -
0.2231588, -0.5051651, -0.74871174, 0.9450363, 0.4797723, -0.9033313, -
0.5825065, 0.8523742, 0.7402795, -0.7134312, -0.8162558, 0.6345438, -
0.05704138), 3,10)
mean <- colMeans(data2_1, na.rm = TRUE)
sd <- sd(data2_1, na.rm = TRUE)
for (i in 1:2) {
thr <- mean + i*sd
num <- apply(data2_1, 2, function(x) {
temp <- thr
sum(x > (temp), na.rm = TRUE)})
}
C) To remove the 20 warning messages, I have to replace temp <- thr
with temp <- mean + i*sd
data2_1 <- matrix(c(0.9584190, 0.2710325, -0.9495618, -0.1301772, -0.7539687,
0.5344464, -0.8205933, 0.1581723, -0.5351588, 0.04448065, 0.9936430,
0.2278786, -0.8160700, -0.3314779, -0.4047975, 0.1168152, -0.7458182, -
0.2231588, -0.5051651, -0.74871174, 0.9450363, 0.4797723, -0.9033313, -
0.5825065, 0.8523742, 0.7402795, -0.7134312, -0.8162558, 0.6345438, -
0.05704138), 3,10)
mean <- colMeans(data2_1, na.rm = TRUE)
sd <- sd(data2_1, na.rm = TRUE)
for (i in 1:2) {
thr <- mean + i*sd
num <- apply(data2_1, 2, function(x) {
temp <- mean + i*sd
sum(x > (temp), na.rm = TRUE)})
}
[[alternative HTML version deleted]]