如何使用apply,cat和print,而不会得到NULL

时间:2010-10-13 17:01:59

标签: r apply cat

我正在尝试使用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 个答案:

答案 0 :(得分:11)

NULL是R解释器打印您键入的表达式的值 - 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)))

请注意,只有当您以交互方式运行时才打印每一行,如果它在一个函数中,您将看不到它。

答案 1 :(得分:0)

您真的需要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

答案 2 :(得分:0)

正如Dirk所指出的,这不是在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)))