Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to save print(i/j) to an output file?

Tags:

r

I did simple loop and got the result in print but not sure how to output it.

This is what I coded:

>for (i in 0:45) for (j in 0:45) print(i/j)
[1] Inf
[1] 1
[1] 0.5
[1] 0.3333333
[1] 0.25
[1] 0.2
[1] 0.1666667
[1] 0.1428571
[1] 0.125
[1] 0.1111111
[1] 0.1

From here, how can i save this outcome? Should I make print (i/j) into an object or is there other way to save it into a file? thank you,

like image 717
user634455 Avatar asked Feb 25 '11 16:02

user634455


3 Answers

A couple of options, depending on what output you want.

1) capture.output() will grab the output of the loop into a file:

capture.output(for (i in 0:45) for (j in 0:45) print(i/j),
               file = "foo.txt")

2) if you want the numbers, then save the i/j either as an R object via save() or as a text file (e.g. csv) via write.csv(), don't print it.

out <- c() ## NEVER write a loop like this! Always allocate storage & fill in
for(i in 0:45)
    for(j in 0:45)
        out <- c(out, i/j)
head(out)
save(out, "foo.rda")
write.csv(out, "foo.csv")

However, you need to learn about vectorising operations in R. The sort of operation you are doing in R via two loops can be conducted more efficiently in this case using:

out2 <- outer(0:45, 0:45, "/")
like image 64
Gavin Simpson Avatar answered Nov 12 '22 05:11

Gavin Simpson


It really depends on what your want to do. If you just want to capture output into a text file then one of capture.output, cat, or sink are the functions to look at. If you what to create an R object for later use in a session, then create an object with the desired structure: vector, list, matrix, or data.frame. Objects are then saved with the save function. Text representations of objects can be created with dput or dump.

like image 4
IRTFM Avatar answered Nov 12 '22 07:11

IRTFM


I just happen to have a function opened that writes to a file. I used sink() (see DWin's and Gavin's answer for other solutions)

sink(file = file.name, type = "output")
cat("/* File created on", date(), "*/\n")
cat("/* Walker density:", walk.dens, "*/\n")
cat("/* Capture history has", nchar(as.character(cap.hist[1,])),
        "sessions and", nrow(cap.hist), "walkers", "*/\n")
cat("/* number of initial walkers:", params$num.walker, "*/\n")
cat("/* number of steps per walker:", params$n.steps, "*/\n")
cat("/* area size:", params$area, "*/\n")
cat("/* home range:", params$home.range, "*/\n")
cat("/* number of bins:", params$num.bins, "*/\n")
cat("/* capture probability:", params$prob, "*/\n")
cat("/* number of sessions:", params$sessions, "*/\n")
cat("/* number of bootstraps:", params$num.boots, "*/\n")
cat("/* number of facies:", params$n.faces, "*/\n")
cat("/* working directory:", params$work.dir, "*/\n")
cat("/* number of cores for parallel:", params$num.cores, "*/\n")
cat("/* resolution of raster:", params$rsln, "*/\n")
cat("/* function used to modify resolution:", params$rsln.fun, "*/\n")
cat("/* created walk saved:", params$write.walk, "*/\n")
cat("/* columns: cap.hist/probs/world */\n\n")
apply(mat, 1, function(x) {
            cat(x["cap.hist"], x["probs"], x["supop"], ";", "\n")
        })
sink()

Which produces a file (this is only the head):

/* File created on Fri Feb 25 15:02:27 2011 */
/* Walker density: 0.001 */
/* Capture history has 40 entries and 67 number of walkers */
/* number of initial walkers: 200 */
/* number of steps per walker: 100 */
/* area size: 500 */
/* home range: 100 */
/* number of bins: 10 */
/* capture probability: 0.2 */
/* number of sessions: 40 */
/* number of lines per segment: */
/* number of bootstraps: 999 */
/* number of facies: 30 */
/* working directory: q:/walker/layers */
/* calculations done in parallel: */
/* number of cores for parallel: 4 */
/* resolution of raster: 5 */
/* function used to modify resolution: */
/* created walk saved: TRUE */
/* columns: cap.hist/probs/world */

1000000000010000100000000000000100000101 0.10876344 1 ; 
1000010000000010011000000000001000010000 0.09428192 1 ; 
0010000000001000001001101100000010000010 0.06079921 1 ; 
0000101000000000000000000000000000001001 0.05272485 1 ; 
1000000001101000001000000001000100000010 0.08599779 1 ; 
like image 1
Roman Luštrik Avatar answered Nov 12 '22 06:11

Roman Luštrik