2011-02-25 48 views
4

我做了简单的循环,并得到了打印结果,但不知道如何输出它。如何将打印(i/j)保存到输出文件?

这是我的编码:

>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 

从这里,我怎么能挽救这个结果?我应该打印(i/j)到一个对象还是有其他方式将其保存到文件中? 谢谢,

+2

有一堆的地方是你可以将它保存得从.Rdata(保存整个工作区)到将单个对象保存到文件中,您几乎可以完成所有工作。键入?write.table,?read.table,?sink或类似的东西来开始...阅读同样非常介绍性的R教程。选择任何..您的问题可能会在第一页中介绍。 – 2011-02-25 16:24:01

回答

3

这真的取决于你想做什么。如果您只想将输出捕获到文本文件中,则需要查看capture.output,catsink之一。如果您要创建R对象以供以后在会话中使用,请创建一个具有所需结构的对象:vector,list,matrix或data.frame。然后将对象与save函数一起保存。对象的文本表示可以使用dputdump创建。

13

有几个选项,取决于您想要的输出

1)capture.output()将抓住回路的输出到一个文件:

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

2)如果希望的数字,然后经由save()或作为文本文件保存i/j或者作为R对象(例如csv)通过write.csv(),不要打印它。

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") 

但是,你需要了解有关R.向量化操作的排序,你是通过两个环路做R中的操作可以在这种情况下更有效地进行使用:

out2 <- outer(0:45, 0:45, "/") 
+0

非常感谢加文的回答。你的解释真的很好理解。我今天从你身上学到了很多东西。 – user634455 2011-02-25 19:09:07

1

我只是碰巧有一个打开的函数写入文件。我用汇()(见迪文的和Gavin对其他解决方案的答案)

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() 

其产生的文件(这只是头):

/* 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 ; 
+0

感谢罗马所有的猫和水槽功能。现在我可以尝试这些,他们对我来说是新的。 – user634455 2011-02-25 19:10:41