Как сохранить печать (I / J) в выходной файл? - PullRequest
7 голосов
/ 25 февраля 2011

Я сделал простой цикл и получил результат в распечатке, но не уверен, как его вывести.

Это то, что я кодировал:

>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

Отсюда, как я могу сохранить эторезультат?Должен ли я сделать print (i / j) в объект или есть другой способ сохранить его в файл?спасибо,

Ответы [ 3 ]

16 голосов
/ 25 февраля 2011

Пара опций, в зависимости от того, какой вывод вы хотите.

1) capture.output() захватит вывод цикла в файл:

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

2) если вам нужны цифры, сохраните i/j либо как объект R с помощью save(), либо как текстовый файл (например, 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, "/")
4 голосов
/ 25 февраля 2011

Это действительно зависит от того, что вы хотите сделать. Если вы просто хотите записать вывод в текстовый файл, тогда вам нужно посмотреть одну из capture.output, cat или sink. Если вам нужно создать объект R для последующего использования в сеансе, то создайте объект с желаемой структурой: вектор, список, матрица или data.frame. Затем объекты сохраняются с помощью функции save. Текстовые представления объектов могут быть созданы с помощью dput или dump.

1 голос
/ 25 февраля 2011

Мне просто открыли функцию, которая пишет в файл. Я использовал раковину () (см. Ответ DWin и 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 ; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...