An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20120911/3f9e78d7/attachment.pl>
How to append the random no.s for different variables in the same data.frame
3 messages · Vincy Pyne, R. Michael Weylandt, PIKAL Petr
On Wed, Sep 12, 2012 at 7:51 AM, Vincy Pyne <vincy_pyne at yahoo.ca> wrote:
Dear R helpers,
(At the outset I sincerely apologize if I have not put forward my following query properly, though I have tried to do so.)
Following is a curtailed part of my R - code where I am trying to generate say 100 random no.s for each of the products under consideration.
library(plyr)
n = 100
my_code = function(product, output_avg, output_stdev)
{
BUR_mc = rnorm(n, output_avg, output_stdev)
sim_BUR = data.frame(product, BUR_mc)
write.csv(data.frame(sim_BUR), 'sim_BUR.csv', row.names = FALSE)
return(list(output_avg, output_stdev))
}
result <- dlply(.data = My_data, .variables = "product", .fun = function(x)
my_code(product = x$product, output_avg = x$output_avg,
output_stdev = x$output_stdev))
There are some 12 products (and this may vary each time). In my original code, the "return" statement returns me some other output. Here for simplicity sake, I am just using the values as given in input.
PROBLEM - A :
I want to store the random no.s (BUR_mc) as generated above for each of the products and store them in a single data.frame. Now when I access 'sim_BUR.csv', I get the csv file where the random nos. generated for the last product are getting stored. I need something like
product random no
product1 .......
product1 .......
.............................
product1 ....... # (This is 100th value generated for product1)
product2 .......
product2 .......
............................
............................
............................
Problem - B
Also, is it possible to have more than one 'return' statements in a given function?
No: if you want to return multiple values, put them in a list and return that:
f <- function(n, nn){
x <- rnorm(n)
y <- rexp(nn)
ret <- list(x = x, y = y)
return(ret)
}
Cheers,
M
Thanking in advance
Vincy
[[alternative HTML version deleted]]
______________________________________________ R-help at 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.
Hi
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
project.org] On Behalf Of Vincy Pyne
Sent: Wednesday, September 12, 2012 8:51 AM
To: r-help at r-project.org
Subject: [R] How to append the random no.s for different variables in
the same data.frame
Dear R helpers,
(At the outset I sincerely apologize if I have not put forward my
following query properly, though I have tried to do so.)
Following is a curtailed part of my R - code where I am trying to
generate say 100 random no.s for each of the products under
consideration.
library(plyr)
n = 100
my_code = function(product, output_avg, output_stdev)
??? {
BUR_mc = rnorm(n, output_avg, output_stdev)
sim_BUR = data.frame(product, BUR_mc)
write.csv(data.frame(sim_BUR), 'sim_BUR.csv', row.names = FALSE)
return(list(output_avg, output_stdev))
??? }
result <- dlply(.data = My_data, .variables = "product", .fun =
function(x)
???????????????? my_code(product = x$product, output_avg =
x$output_avg,
???????????????? output_stdev = x$output_stdev))
There are some 12 products (and this may vary each time). In my
original code, the "return" statement returns me some other output.
Here for simplicity sake, I am just using the values as given in input.
PROBLEM - A :
I want to store the random no.s (BUR_mc) as generated above for each of
the products and store them in a single data.frame. Now when I access
'sim_BUR.csv', I get the csv file where the random nos. generated for
the last product are getting stored. I need something like
Why do you want to write csv files? Maybe it would be better to form this data frame directly. As you did not provide any date here are some fake mydf<-expand.grid(1:10,letters[1:3]) mydf$rnum<-rnorm(30) mydf Var1 Var2 rnum 1 1 a 0.35928359 2 2 a 0.27431573 3 3 a 0.22948381 4 4 a -1.31041870 5 5 a 2.57832871 6 6 a 0.10697714 .................... 29 9 c -0.33768297 30 10 c 0.85797343 To add mean and sd mydf$m<-ave(dmydf$rnum, dmydf$Var2, FUN=mean) dmydf$sd<-ave(dmydf$rnum, dmydf$Var2, FUN=sd)
product????????? random no product1???????? ....... product1???????? ....... ............................. product1???????? .......????????????????????? # (This is 100th value generated for product1) product2???????? ....... product2???????? ....... ............................ ............................ ............................ Problem - B Also, is it possible to have more than one 'return' statements in a given function?
AFAIK no. But you can store output values in list/vector/matrix/data frame so you can get more results in one return statement. Regards Petr
Thanking in advance Vincy [[alternative HTML version deleted]]