Dear R helpers, Following is my R code where I am trying to calculate returns and then trying to create a data.frame. Since, I am not aware how many instruments I will be dealing so I have constructed a function. My R code is as follows -
library(plyr) mydata <- data.frame(instru_name = c("instru_A","instru_A","instru_A","instru_A","instru_A","instru_A","instru_A","instru_A","instru_A","instru_A","instru_A","instru_A","instru_A","instru_A","instru_B","instru_B","instru_B","instru_B","instru_B","instru_B","instru_B","instru_B","instru_B","instru_B","instru_B","instru_B","instru_B","instru_B"), date = c("10-Jan-12","9-Jan-12","8-Jan-12", "7-Jan-12", "6-Jan-12","5-Jan-12","4-Jan-12","3-Jan-12","2-Jan-12","1-Jan-12", "31-Dec-11", "30-Dec-11","29-Dec-11","28-Dec-11","10-Jan-12","9-Jan-12","8-Jan-12", "7-Jan-12","6-Jan-12","5-Jan-12","4-Jan-12","3-Jan-12","2-Jan-12","1-Jan-12","31-Dec-11","30-Dec-11","29-Dec-11","28-Dec-11"), price = c(11.9,10.5,13,14.5,14.4,14.8,10.1,12,14.3, 10.7,11.2,10.2,10.2,10.8,41.9,40.5,43,44.5,44.4,48.8,42.1,44,46.3,48.7,46.2,44.2,42.2,40.8)) attach(mydata) opt_return_volatilty = function(price, instru_name) { price_returns = matrix(data = NA, nrow = (length(price)-1), ncol = 1) for (i in(1:(length(price)-1))) { price_returns[i] = log(price[i]/price[i+1]) } volatility = sd(price_returns) entity_returns = unique(instru_name) colnames(price_returns) = entity_returns write.csv(price_returns, file = paste(entity_returns, ".csv", sep = ""), row.names = FALSE) return(data.frame(list(volatility = volatility))) } entity_volatility <- ddply(.data=mydata, .variables = "instru_name", .fun=function(x) opt_return_volatilty(price = x$price, instru_name = x$instru_name)) > entity_volatility instru_name volatility 1 instru_A 0.17746897 2 instru_B 0.06565341 fileNames <- list.files(pattern = "instru.*.csv") > fileNames [1] "instru_A.csv" "instru_B.csv" # _____________________________________________________________________________________ # MY QUERY # I need to construct the data frame consisting of all the returns. I.e. I need to have # a data.frame like instru_A instru_B 0.125163143 0.033983853 -0.2135741 -0.059898142 -0.109199292 -0.034289073 0.006920443 0.00224972 -0.027398974 -0.094490843 I am using following Code input <- do.call(rbind, lapply(fileNames, function(.name) { .data <- read.csv(.name, header = TRUE, as.is = TRUE) .data$file <- .name .data })) # I get following error. Error in match.names(clabs, names(xi)) : names do not match previous names Kindly guide Regards Vincy [[alternative HTML version deleted]]
______________________________________________ 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.