如何使用 apply、cat 和 print,而不获取 NULL

发布于 2024-09-27 00:01:23 字数 643 浏览 7 评论 0原文

我正在尝试使用 cat() 作为 apply() 中的函数。我几乎可以让R做我想做的事,但是在返回结束时我得到了一些非常令人困惑的(对我来说)NULL。这是一个愚蠢的例子,以强调我所得到的。

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?

I am trying to use cat() as functions inside apply(). I can almost make R do what I want, but I'm getting some very confusing (to me) NULLS at the end of the return. Here is a silly example, to highlight what I'm getting.

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

This "works" in that R accepts it and it runs, but I don't understand the results.

> 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

But, I want to get:

> 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

So, how do I remove that final NULL?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我是男神闪亮亮 2024-10-04 00:01:23

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

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

The NULL is the R interpreter printing the value of the expression you typed in - the apply. You can either assign it somewhere:

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

in which case it wont get printed, or wrap it in 'invisible':

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

Note that its only when you run this interactively that each line is printed, if it's in a function you won't see it.

话少情深 2024-10-04 00:01:23

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

Do you really need the apply() to loop through your content?

> 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
万人眼中万个我 2024-10-04 00:01:23

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

As Dirk pointed out this is not the way to print thing in R. Usually you would assign the result to a variable and then print it. No side effects, so to say.

Your problem stems from the cat functions, which prints to the terminal as a side effect, but returns NULL.

Try

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

If you really want to use apply for printing, there are two solutions. Wrap into invisible call

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

or, just assign the result (NULL) to a temporary value

t <- apply(values, 1, function(x) invisible(cat(x[1], x[2], fill=TRUE)))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文