Как использовать применить, кошка и печать, не получая NULL - PullRequest
6 голосов
/ 13 октября 2010

Я пытаюсь использовать cat () как функции внутри apply ().Я могу почти заставить R делать то, что я хочу, но я получаю некоторые очень запутанные (для меня) NULLS в конце возвращения.Вот глупый пример, чтобы подчеркнуть то, что я получаю.

val1 <- 1:10
val2 <- 25:34
values <- data.frame(val1, val2)
apply(values, 1, function(x) cat(x[1], x[2], fill=TRUE))

Это «работает» в том смысле, что R принимает его и запускает, но я не понимаю результатов.

> apply(values, 1, function(x) cat(x[1], x[2], fill=TRUE))
1 25
2 26
3 27
4 28
5 29
6 30
7 31
8 32
9 33
10 34
NULL

Но я хочу получить:

> apply(values, 1, function(x) cat(x[1], x[2], fill=TRUE))
1 25
2 26
3 27
4 28
5 29
6 30
7 31
8 32
9 33
10 34

Итак, как мне удалить этот окончательный NULL?

Ответы [ 3 ]

11 голосов
/ 13 октября 2010

NULL - это интерпретатор R, печатающий значение введенного вами выражения - the apply. Вы можете назначить его где-нибудь:

junk = apply(values, 1, function(x) cat(x[1], x[2], fill=TRUE))

в этом случае он не будет напечатан или обернут в «невидимый»:

invisible(apply(values, 1, function(x) cat(x[1], x[2], fill=TRUE)))

Обратите внимание, что только когда вы запускаете это интерактивно, каждая строка печатается, если она находится в функции, вы ее не увидите.

0 голосов
/ 13 октября 2010

Как указал Дирк, это не способ напечатать что-либо в R. Обычно вы присваиваете результат переменной, а затем распечатываете ее.Никаких побочных эффектов, так сказать.

Ваша проблема связана с функциями cat, которые печатают на терминале как побочный эффект, но возвращают NULL.

Попробуйте

a <- cat("blabla\n")  
a

Если вы действительно хотите использоватьПодать заявку на печать, есть два решения.Оберните в невидимый вызов

invisible(apply(values, 1, function(x) invisible(cat(x[1], x[2], fill=TRUE))))

или просто присвойте результат (NULL) временному значению

t <- apply(values, 1, function(x) invisible(cat(x[1], x[2], fill=TRUE)))
0 голосов
/ 13 октября 2010

Вам действительно нужен apply() для просмотра вашего контента?

> print(values, row.names=FALSE)
 val1 val2
    1   25
    2   26
    3   27
    4   28
    5   29
    6   30
    7   31
    8   32
    9   33
   10   34
...