2011-02-25 75 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