編集:追加の完全なコードゴーストNULLコンソール出力を強制終了しますか?
は、私はそれがコンソールにはいくつかの浮遊NULL
を出力除いて、作業をしているように見える「プロット」のS4の方法を作ったと私はそれがから来るのどこを見つけ出すことはできません。
print(plot(x = flux, y = 1, fastplot = TRUE, quietly = TRUE))
とクラス:
flux <- setClass(
# Set the class name
"flux",
slots = c(
raw.data = "list",
source.files = "character",
data = "matrix",
time = "POSIXct",
datatype = "character",
metadata = "data.frame"
)
)
と方法:
setMethod("plot",
signature(x = "flux"),
function (x, y, ...) {
CheckFluxObject(x)
params <- LoadDefaults(flux = x)
# Interpret 'plot' arguments
par.restore <- par(no.readonly = TRUE)
on.exit(expr = par(par.restore), add = TRUE)
arguments <- list(...)
if (!("fastplot" %in% names(arguments))) {
fastplot <- FALSE
} else {
fastplot <- arguments$fastplot
arguments$fastplot <- NULL
}
if (!("quietly" %in% names(arguments))) {
quietly <- FALSE
} else {
quietly <- arguments$quietly
arguments$quietly <- NULL
}
par(ask=!(fastplot))
if (!("ylab" %in% arguments)) {
ylab <- params["units"]
} else {
ylab <- arguments$ylab
arguments$ylab <- NULL
}
# Pull relevant 'flux' class object data
data <- slot(x, "data")
if (missing("y")) {
y <- 1:ncol(data)
} else {
stopifnot(
is.integer(y),
all(y %in% 1:ncol(data))
)
}
# Bulk function execution
if (quietly == FALSE) {
message("Plotting data traces:")
}
plot.obj <- plot.new()
print("NULL is in the 'for' loop...")
for (i in y){
main <- colnames(data)[i]
plot.obj <- plot(slot(x, "time"), data[, i], main = main,
xlab = "Time", ylab = ylab, unlist(arguments))
print(plot.obj)
}
print("but is it also here??")
# Clean-up and exit
if (quietly == FALSE) {
message("Done plotting.")
}
if (length(y) == 1) {
invisible(plot.obj)
}
print("or here??")
invisible(NULL)
}
)
そのための出力は次のとおりです。ここでは、トップレベルのコードです
[1] "NULL is in the 'for' loop..."
NULL
[1] "but is it also here??"
[1] "or here??"
NULL
場合I後に別のprint("what about here??")
にスローするinvisible(NULL)
、 は、それはこの行います
[1] "NULL is in the 'for' loop..."
NULL
[1] "but is it also here??"
[1] "or here??"
[1] "what about here??"
[1] "what about here??"
を私は予想していないよ関数の戻りや印刷コマンドのいくつかの行動はありますか? CheckFluxObject関数は、すべてのスロットが満たされていることを確認するだけです。あなたはそれはそう関数内のプロットを生成しようとしている場合
はどうやらプロットのprint
方法が戻っNULL
オブジェクト、および:
この質問は興味深いことですが、100%再現性を高めることができればよいでしょう。 [mcve]をお読みください。 –
'print(plot.obj)'からです。私はちょうどコンソール 'z = plot(1:10,1:10)'で試してみましたが、プロットは直ちに作成されましたが、変数 'z'には' NULL'が割り当てられました。 'NULL 'の変数を出力しています。 –
OK、R. Schifiniのコメントは、' print(plot.obj)'の代わりに最初のものを削除するのに役立ちました。 'invisible(plot.obj) 'を使用しました。ヌルなしでOKをプロットします。今度は2番目に!私は必要なコードをすべて追加したと思います。 – brandonEm