在R中如果我的函数绘制图形

时间:2017-04-21 03:19:00

标签: r plot shiny

您好我有一个名为basic_plot()的函数,如果变量plot_function = TRUE将生成一个图,否则它返回NULL。它如下

plot_function = TRUE;

basic_plot = function() {
 if(plot_function) {
  par(mfrow = c(1,3))
  plot(1:10,1:10,type = "o")
  plot(10:1,1:10,type = "o")
  plot(1:10,rep(5,10),type = "o")
 } else {
  NULL;
 }
}
basic_plot();

应生成一个图表,其中树面板上填充了一些线条。此函数及其依赖的变量嵌入在其他一些代码中。我想知道的是,如果绘制了绘图,我怎么能告诉if()语句?例如

if(is.null(basic_plot())) {
  print("I haven't drawn the plot yet")
} else {
  print("I have drawn the plot and want to do more stuff.")
}

上述问题是如果函数绘制图形,则认为它为空。所以我永远都不会知道我何时画出这样的情节,例如

plot_function = TRUE;
is.null(basic_plot())
[1] TRUE

plot_function = FALSE;
is.null(basic_plot())
[1] TRUE

真正的应用程序是在一个闪亮的应用程序,但实际上认为这可能是一个通用的R查询。除了在basic_plot()函数中生成绘图之外,我无法返回任何内容(避免在绘制绘图后明显返回某些内容)。我希望有一个替代函数is.null(),比如有没有这个函数做什么?

干杯, ç

2 个答案:

答案 0 :(得分:1)

简单回答:在函数中返回TRUE或FALSE:

basic_plot = function() {
 if(plot_function) {
  par(mfrow = c(1,3))
  plot(1:10,1:10,type = "o")
  plot(10:1,1:10,type = "o")
  plot(1:10,rep(5,10),type = "o")
  return(TRUE) # Now the function will plot, then return TRUE
 } else {
  return(FALSE) # Now the function will return FALSE instead of NULL
 }
}

# We can make this a function too
check_plot <- function() {
  if(basic_plot()) {
    print("I have drawn the plot and want to do more stuff.")
  } else {
    print("I haven't drawn the plot yet")
  }
}

# Now we can simply check:
plot_function <- TRUE
check_plot()

plot_function <- FALSE
check_plot()

# Note: it is generally bad practice to use global variables like this!

答案 1 :(得分:1)

在您的函数basic_plot中,plot(1:10,rep(5,10),type = "o")命令不会为函数指定任何内容,因此它仍然是NULL

例如,下面将TRUE分配给您的功能。

plot_function = TRUE;

basic_plot = function() {
if(plot_function) {
par(mfrow = c(1,3))
plot(1:10,1:10,type = "o")
plot(10:1,1:10,type = "o")
plot(1:10,rep(5,10),type = "o")
TRUE
} else {
NULL;
}
}
basic_plot();

为了将图存储为对象,使用recordPlot()

 myplot<-recordPlot()