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