6

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を削除できますか?

4

3 に答える 3

14

NULLは、入力した式の値を出力するRインタープリターです-apply。どこかに割り当てることができます:

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

その場合、印刷されないか、「invisible」でラップされます。

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

本当に印刷に適用したい場合は、2つの解決策があります。目に見えない呼び出しに包む

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 に答える