R标记能否显示函数内创建的ggplot图?

R标记能否显示函数内创建的ggplot图?,r,function,ggplot2,r-markdown,R,Function,Ggplot2,R Markdown,我有一个名为“我的函数”的函数,它创建一个ggplot图并将其保存在函数中 #define a function "add_data" to transpose peak values into summary table my_function <- function(exp, cond) { #Read in appropriate experiment number #Remove first 2 columns #Rename first co

我有一个名为“我的函数”的函数,它创建一个ggplot图并将其保存在函数中

#define a function "add_data" to transpose peak values into summary table
my_function <- function(exp, cond) {
  
  #Read in appropriate experiment number
  #Remove first 2 columns
  #Rename first column to "mintime" and convert to minutes
  #Normalize raw fluorescence values
  
  flowdata <- read_csv(paste0(exp, ".csv"))                                  
  title <- cond                                            
  flowdata <- flowdata[, -c(1:2)] %>%
    rename(mintime = 1) %>%
    transform(mintime = mintime / 60)
  flowdata[,-1] <- data.frame(lapply(flowdata[,-1], function(X) X/X[1]))
  
  #Exclude values up to 5 minutes
  #Determine number of peaks per cell
  #Add number of peaks per cell to summary table
  flowdata_cut <- flowdata[which(flowdata$mintime>=5),]
  peak_info <- lapply(flowdata_cut[,-1], findpeaks, threshold=2)
  numberpeak <- unlist(lapply(peak_info, nrow))
  summarypeaks <- add_peaks(summarypeaks, numberpeak, title)
  
  #Prepare data for line graph
  melted <- melt(flowdata, id.vars="mintime")
  
  #####CREATE GRAPH#####
  #Plot graph
  ggplot(data=melted, aes(x=mintime, y=value, group=variable)) + 
    geom_line(show.legend = FALSE) +
    scale_x_continuous(limits = c(3, 12), breaks = seq(3, 12, by = 3)) +
    labs(y="Fluo-4 fluorescence (F/F0)", x = "Time (min)") +            
    ggtitle(title) +                                   
    theme_bw() +
    
    # remove elements we don't need
    theme(panel.grid = element_blank(),
          panel.border = element_blank(),
          panel.grid.major = element_blank(),
          panel.grid.minor = element_blank(),
          axis.line = element_line(colour = "black"),
          panel.background = element_blank()) 
  
  
  #####SAVE GRAPH##### 
  #Save line graph as .png file
  ggsave(filename = paste0(exp, "_Line_Graph.jpg"), width = 8, height = 4)
  
  # Return
  return(summarypeaks)
  
}

#定义一个函数“add_data”将峰值转换为汇总表

my_function通过使用副作用,可以在不返回的情况下让绘图显示。具体来说,您需要将
ggplot
对象保存到某个变量中,比如
p
,然后告诉R使用
plot()
打印它。你不需要改变函数返回结果的方式,这只是一个副作用。请参见以下更新版本的函数:

#define a function "add_data" to transpose peak values into summary table
my_function <- function(exp, cond) {
  
  #Read in appropriate experiment number
  #Remove first 2 columns
  #Rename first column to "mintime" and convert to minutes
  #Normalize raw fluorescence values
  
  flowdata <- read_csv(paste0(exp, ".csv"))                                  
  title <- cond                                            
  flowdata <- flowdata[, -c(1:2)] %>%
    rename(mintime = 1) %>%
    transform(mintime = mintime / 60)
  flowdata[,-1] <- data.frame(lapply(flowdata[,-1], function(X) X/X[1]))
  
  #Exclude values up to 5 minutes
  #Determine number of peaks per cell
  #Add number of peaks per cell to summary table
  flowdata_cut <- flowdata[which(flowdata$mintime>=5),]
  peak_info <- lapply(flowdata_cut[,-1], findpeaks, threshold=2)
  numberpeak <- unlist(lapply(peak_info, nrow))
  summarypeaks <- add_peaks(summarypeaks, numberpeak, title)
  
  #Prepare data for line graph
  melted <- melt(flowdata, id.vars="mintime")
  
  #####CREATE GRAPH#####
  #Plot graph
  p <- ggplot(data=melted, aes(x=mintime, y=value, group=variable)) + 
    geom_line(show.legend = FALSE) +
    scale_x_continuous(limits = c(3, 12), breaks = seq(3, 12, by = 3)) +
    labs(y="Fluo-4 fluorescence (F/F0)", x = "Time (min)") +            
    ggtitle(title) +                                   
    theme_bw() +
    
    # remove elements we don't need
    theme(panel.grid = element_blank(),
          panel.border = element_blank(),
          panel.grid.major = element_blank(),
          panel.grid.minor = element_blank(),
          axis.line = element_line(colour = "black"),
          panel.background = element_blank()) 

  plot(p)
  
  #####SAVE GRAPH##### 
  #Save line graph as .png file
  ggsave(filename = paste0(exp, "_Line_Graph.jpg"), width = 8, height = 4)
  
  # Return
  return(summarypeaks)
  
}
#定义一个函数“add_data”将峰值转换为汇总表

my_函数您的函数没有返回任何绘图,它返回的是
summarypeaks
。您还需要使用函数返回绘图。我会做一些类似于
return(list(peaks=summarypeaks,plot=plt))
,假设您将
ggplot
调用的结果存储在变量
plt
中。啊,我明白了。谢谢你指出这一点。它现在正在工作。
#define a function "add_data" to transpose peak values into summary table
my_function <- function(exp, cond) {
  
  #Read in appropriate experiment number
  #Remove first 2 columns
  #Rename first column to "mintime" and convert to minutes
  #Normalize raw fluorescence values
  
  flowdata <- read_csv(paste0(exp, ".csv"))                                  
  title <- cond                                            
  flowdata <- flowdata[, -c(1:2)] %>%
    rename(mintime = 1) %>%
    transform(mintime = mintime / 60)
  flowdata[,-1] <- data.frame(lapply(flowdata[,-1], function(X) X/X[1]))
  
  #Exclude values up to 5 minutes
  #Determine number of peaks per cell
  #Add number of peaks per cell to summary table
  flowdata_cut <- flowdata[which(flowdata$mintime>=5),]
  peak_info <- lapply(flowdata_cut[,-1], findpeaks, threshold=2)
  numberpeak <- unlist(lapply(peak_info, nrow))
  summarypeaks <- add_peaks(summarypeaks, numberpeak, title)
  
  #Prepare data for line graph
  melted <- melt(flowdata, id.vars="mintime")
  
  #####CREATE GRAPH#####
  #Plot graph
  p <- ggplot(data=melted, aes(x=mintime, y=value, group=variable)) + 
    geom_line(show.legend = FALSE) +
    scale_x_continuous(limits = c(3, 12), breaks = seq(3, 12, by = 3)) +
    labs(y="Fluo-4 fluorescence (F/F0)", x = "Time (min)") +            
    ggtitle(title) +                                   
    theme_bw() +
    
    # remove elements we don't need
    theme(panel.grid = element_blank(),
          panel.border = element_blank(),
          panel.grid.major = element_blank(),
          panel.grid.minor = element_blank(),
          axis.line = element_line(colour = "black"),
          panel.background = element_blank()) 

  plot(p)
  
  #####SAVE GRAPH##### 
  #Save line graph as .png file
  ggsave(filename = paste0(exp, "_Line_Graph.jpg"), width = 8, height = 4)
  
  # Return
  return(summarypeaks)
  
}