6

我正在尝试在cat()内部使用 as 函数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?

4

3 回答 3

14

NULL 是 R 解释器打印您输入的表达式的值 - 应用。您可以将其分配到某处:

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

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

于 2010-10-13T17:22:17.353 回答
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
于 2010-10-13T17:15:48.897 回答
0

正如 Dirk 指出的那样,这不是在 R 中打印东西的方式。通常你会将结果分配给一个变量,然后打印它。没有副作用,可以这么说。

您的问题源于 cat 函数,它作为副作用打印到终端,但返回 NULL。

尝试

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

如果真的要使用apply进行打印,有两种解决方案。裹进无形的呼唤

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)))
于 2010-10-13T17:25:18.647 回答