Hi,
It is because of different dimensions of Simulation data? within each Site.
Try:
dir.create("final")
lst1 <- split(list.files(pattern = ".csv"), gsub("\\_.*",
"", list.files(pattern = ".csv")))
sapply(lst1,length)
#G100 G101 G102 G103 G104 G105 G106 G107 G108 G109 G110 G111 G112 G113 G114 G115
# 100? 100? 100? 100? 100? 100? 100? 100? 100? 100? 100? 100? 100? 100? 100? 100
#G116 G117 G118 G119 G120 GG10 GG11 GG12 GG13 GG14 GG15 GG16 GG17 GG18 GG19 GG20
# 100? 100? 100? 100? 100? 100? 100? 100? 100? 100? 100? 100? 100? 100? 100? 100
#GG21 GG22 GG23 GG24 GG25 GG26 GG27 GG28
# 100? 100? 100? 100? 100? 100? 100? 100
lst2 <- lapply(lst1, function(x1) lapply(x1, function(x2) {
? ? lines1 <- readLines(x2)
? ? header1 <- lines1[1:2]
? ? dat1 <- read.table(text = lines1, header = FALSE, sep = ",",
stringsAsFactors = FALSE,
? ? ? ? skip = 2)
? ? colnames(dat1) <- Reduce(paste, strsplit(header1, ","))
? ? dat1[-c(nrow(dat1), nrow(dat1) - 1), ]
}))
##dimensions differ within each Site
sapply(lst2,function(x) sapply(x,ncol))[1:6,5:8]
#? ? G104 G105 G106 G107
#[1,]? 258? 257? 258? 258
#[2,]? 258? 258? 258? 258
#[3,]? 258? 258? 258? 258
#[4,]? 258? 257? 258? 258
#[5,]? 258? 258? 258? 258
#[6,]? 258? 258? 258? 258
##number of rows are consistent
sapply(lst2,function(x) any(sapply(x,nrow)!=9))
# G100? G101? G102? G103? G104? G105? G106? G107? G108? G109? G110? G111? G112
#FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# G113? G114? G115? G116? G117? G118? G119? G120? GG10? GG11? GG12? GG13? GG14
#FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# GG15? GG16? GG17? GG18? GG19? GG20? GG21? GG22? GG23? GG24? GG25? GG26? GG27
#FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# GG28
#FALSE
names1 <- unique(unlist(lapply(lst2,function(x) unlist(lapply(x,function(y)
names(y)[-1])))))
length(names1)
#[1] 257
# lstYear <- lapply(lst2,function(x) lapply(x, function(y)
# y[,1,drop=FALSE])[[1]])
library(plyr)
lapply(seq_along(lst2),function(i) {lstN <- lapply(lst2[[i]],function(x)
{datN <- as.data.frame(matrix(NA, nrow=9,
ncol=length(names1),dimnames=list(NULL,names1)));datN[,names1] <- x[,-1];
datN }); lstQ1 <- lapply(lstN,function(x) numcolwise(function(y)
quantile(y,seq(0,1,by=0.01), na.rm=TRUE))(x)); arr1 <- array(unlist(lstQ1),
dim=c(dim(lstQ1[[1]]),length(lstQ1)),dimnames=list(NULL,lapply(lstQ1,names)[[1]]));
res <- rowMeans(arr1, dims=2, na.rm=TRUE); colnames(res) <- gsub("
", "_", colnames(res)); res1 <-
data.frame(Percentiles=paste0(seq(0,100, by=1),"%"),res,
stringsAsFactors=FALSE); write.csv(res1,paste0(paste(getwd(), "final",
paste(names(lst1)[[i]], "Quantile", sep="_"), sep=
"/"), ".csv"), row.names=FALSE, quote=FALSE)})
## output files
list.files(recursive = TRUE)[grep("Quantile", list.files(recursive =
TRUE))]
#[1] "final/G100_Quantile.csv" "final/G101_Quantile.csv"
#[3] "final/G102_Quantile.csv" "final/G103_Quantile.csv"
#[5] "final/G104_Quantile.csv" "final/G105_Quantile.csv"
#[7] "final/G106_Quantile.csv" "final/G107_Quantile.csv"
#[9] "final/G108_Quantile.csv" "final/G109_Quantile.csv"
#[11] "final/G110_Quantile.csv" "final/G111_Quantile.csv"
#[13] "final/G112_Quantile.csv" "final/G113_Quantile.csv"
#[15] "final/G114_Quantile.csv" "final/G115_Quantile.csv"
#[17] "final/G116_Quantile.csv" "final/G117_Quantile.csv"
#[19] "final/G118_Quantile.csv" "final/G119_Quantile.csv"
#[21] "final/G120_Quantile.csv" "final/GG10_Quantile.csv"
#[23] "final/GG11_Quantile.csv" "final/GG12_Quantile.csv"
#[25] "final/GG13_Quantile.csv" "final/GG14_Quantile.csv"
#[27] "final/GG15_Quantile.csv" "final/GG16_Quantile.csv"
#[29] "final/GG17_Quantile.csv" "final/GG18_Quantile.csv"
#[31] "final/GG19_Quantile.csv" "final/GG20_Quantile.csv"
#[33] "final/GG21_Quantile.csv" "final/GG22_Quantile.csv"
#[35] "final/GG23_Quantile.csv" "final/GG24_Quantile.csv"
#[37] "final/GG25_Quantile.csv" "final/GG26_Quantile.csv"
#[39] "final/GG27_Quantile.csv" "final/GG28_Quantile.csv"
ReadOut1 <- lapply(list.files(recursive = TRUE)[grep("Quantile",
list.files(recursive = TRUE))],
? ? function(x) read.csv(x, header = TRUE, stringsAsFactors = FALSE))
sapply(ReadOut1,function(x) dim(x))
#? ? [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
#[1,]? 101? 101? 101? 101? 101? 101? 101? 101? 101? 101? 101? 101? 101? 101
#[2,]? 258? 258? 258? 258? 258? 258? 258? 258? 258? 258? 258? 258? 258? 258
#? ? [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26]
#[1,]? 101? 101? 101? 101? 101? 101? 101? 101? 101? 101? 101? 101
#[2,]? 258? 258? 258? 258? 258? 258? 258? 258? 258? 258? 258? 258
#? ? [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38]
#[1,]? 101? 101? 101? 101? 101? 101? 101? 101? 101? 101? 101? 101
#[2,]? 258? 258? 258? 258? 258? 258? 258? 258? 258? 258? 258? 258
#? ? [,39] [,40]
#[1,]? 101? 101
#[2,]? 258? 258
ReadOut1[[1]][1:3,1:3]
#? Percentiles? txav_DJF txav_MAM
#1? ? ? ? ? 0% -12.56619 6.795429
#2? ? ? ? ? 1% -12.45888 6.864886
#3? ? ? ? ? 2% -12.35157 6.934344
### Q2:
dir.create("Indices")
names1 <- lapply(ReadOut1, function(x) names(x))[[1]]
lstNew <- simplify2array(ReadOut1)
nrow(lstNew)
#[1] 258
lapply(2:nrow(lstNew), function(i) {
? ? dat1 <- data.frame(lstNew[1], do.call(cbind, lstNew[i, ]),
stringsAsFactors = FALSE)
? ? colnames(dat1) <- c(rownames(lstNew)[1], paste(names(lst1),
rep(rownames(lstNew)[i],
? ? ? ? length(lst1)), sep = "_"))
? ? write.csv(dat1, paste0(paste(getwd(), "Indices",
rownames(lstNew)[i], sep = "/"),
? ? ? ? ".csv"), row.names = FALSE, quote = FALSE)
})
## Output2:
ReadOut2 <- lapply(list.files(recursive = TRUE)[grep("Indices",
list.files(recursive = TRUE))],
? ? function(x) read.csv(x, header = TRUE, stringsAsFactors = FALSE))
length(ReadOut2)
#[1] 257
head(ReadOut2[[1]], 2)
#Percentiles G100_pav_ANN G101_pav_ANN G102_pav_ANN G103_pav_ANN G104_pav_ANN
#1? ? ? ? ? 0%? ? 0.978451? ? 0.9517680? ? 0.9383280? ? 0.8519280? ? 0.9438790
#2? ? ? ? ? 1%? ? 0.992648? ? 0.9638816? ? 0.9480754? ? 0.8625262? ? 0.9548512
#? G105_pav_ANN G106_pav_ANN G107_pav_ANN G108_pav_ANN G109_pav_ANN G110_pav_ANN
#1? ? 0.9303260? ? 0.7484670? ? 0.9757010? ? 1.049533? ? 0.9841290? ? 0.7778830
#2? ? 0.9417438? ? 0.7594563? ? 0.9868968? ? 1.063668? ? 0.9968095? ? 0.7882509
#? G111_pav_ANN G112_pav_ANN G113_pav_ANN G114_pav_ANN G115_pav_ANN G116_pav_ANN
#1? ? 0.737651? ? 0.8813010? ? 0.9155330? ? 0.829001? ? 0.6778760? ? 0.5463310
#2? ? 0.746934? ? 0.8924871? ? 0.9265448? ? 0.838534? ? 0.6880397? ? 0.5527359
#? G117_pav_ANN G118_pav_ANN G119_pav_ANN G120_pav_ANN GG10_pav_ANN GG11_pav_ANN
#1? ? 0.7191360? ? 0.7470170? ? 0.7859380? ? 0.7774590? ? 0.6303150? ? 0.5200200
#2? ? 0.7278231? ? 0.7556053? ? 0.7975213? ? 0.7852408? ? 0.6381671? ? 0.5258248
#? GG12_pav_ANN GG13_pav_ANN GG14_pav_ANN GG15_pav_ANN GG16_pav_ANN GG17_pav_ANN
#1? ? 0.6672890? ? 0.851834? ? 0.5209710? ? 0.6445290? ? 0.5874320? ? 0.7263650
#2? ? 0.6761913? ? 0.861177? ? 0.5282514? ? 0.6520456? ? 0.5948674? ? 0.7365299
#? GG18_pav_ANN GG19_pav_ANN GG20_pav_ANN GG21_pav_ANN GG22_pav_ANN GG23_pav_ANN
#1? ? 0.6642220? ? 0.5385440? ? 0.5043320? ? 0.7484140? ? 0.6436940? ? 0.541165
#2? ? 0.6729234? ? 0.5454527? ? 0.5120815? ? 0.7575216? ? 0.6502167? ? 0.549040
#? GG24_pav_ANN GG25_pav_ANN GG26_pav_ANN GG27_pav_ANN GG28_pav_ANN
#1? ? 0.5067010? ? 0.7082260? ? 0.6447260? ? 0.6197480? ? 0.9163480
#2? ? 0.5136588? ? 0.7160864? ? 0.6545266? ? 0.6278891? ? 0.9284303
Also, atttached is the script in case the email mangles the code.
A.K.
On Monday, April 14, 2014 6:26 PM, Zilefac Elvis <zilefacelvis at
yahoo.com> wrote:
Hi AK,
I have another request for help.
Attached is a larger file (~27MB) for sample.zip. All files are same as previous
except that I am using more sites to do the same thing that you did with
sample.zip.
When generalizing Quantilecode.R to many sites, I receive an error when I run:
dir.create("Indices")
names1 <- lapply(ReadOut1, function(x) names(x))[[1]]
lstNew <- simplify2array(ReadOut1)
lapply(2:nrow(lstNew), function(i) {
? dat1 <- data.frame(lstNew[1], do.call(cbind, lstNew[i, ]), stringsAsFactors
= FALSE)
? colnames(dat1) <- c(rownames(lstNew)[1], paste(names(lst1),
rep(rownames(lstNew)[i],?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? length(lst1)),
sep = "_"))
? write.csv(dat1, paste0(paste(getwd(), "Indices",
rownames(lstNew)[i], sep = "/"),?
? ? ? ? ? ? ? ? ? ? ? ? ?".csv"), row.names = FALSE, quote = FALSE)
})
and I get this:
Error in 2:nrow(lstNew) : argument of length 0
I have tried a few tricks but could not overcome the error message.
Please help!
Atem.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: Quantilecode.txt
URL:
<https://stat.ethz.ch/pipermail/r-help/attachments/20140414/2628a0b7/attachment-0002.txt>