【问题标题】:plotting routine for n number of arguments in rr中n个参数的绘图例程
【发布时间】:2013-04-20 09:43:31
【问题描述】:

我希望绘制以下参数:

weight <- c(102,20,30,04,022,01,220,10)
height <- c(102,20,30,04,022,01,220,10)

catg <- c(102,20,30,04,022,01,220,10)
catg <- matrix(height,nrow = 2)

这些应该被绘制在一个保存在路径中的 pdf 文件中:

FigureFolder <- "C:\\..."

我正在尝试编写一个函数,该函数接受 n 个输入参数并将它们保存到一个文件中(在这种情况下,如果该文件由 FigureFolder 定义)。我有以下功能:

    Plotting_Function <- function( ...,FigureFolder){

      # find the number of input arguments
      nargin <- length(as.list(match.call())) -1  
      nargin <- nargin - 2

      variable_list <- list(...)
      variable_list <- variable_list[1:nargin]

      for (i in 1:length(variable_list)){
        if (variable_list[i] == "catg")   

routine 1 will go here

        if(variable_list[i] != "catg")

routine 2 will go here

      }
    }

因此,从这里开始,我试图使函数工作,以便如果将变量“catg”插入函数中,绘图例程将遵循例程 1(在我的情况下为轮廓),否则它将遵循例程 2(线图在 y 的情况下)。

但是,我遇到的问题是 variable_list 返回一个数字而不是插入的变量的名称,例如

Plotting_Function <- function(weight,height,catg,FigureFolder)

variable_list 将是 1,2,而 3 不是体重、身高和 catg,因此我不能使用我展示的 if 语句。任何人都可以提出一种方法来完成这项工作吗?

【问题讨论】:

  • 你不要在函数中使用nargin,除了确定它。
  • 什么意思? nargin 是输入参数的数量,用于定义绘图变量的数量
  • [1:nargin] 部分我认为是多余的,您只需打印 ... 中包含的所有变量,无需子集。
  • 但如果我返回 list(...) 它包含 4 个变量,我插入函数和 FigFolder 中的 3 个。
  • 那是因为你命名的参数被称为FigureFolder 而不是FigFolder

标签: r function plot


【解决方案1】:

如果我理解你想要做什么,这将起作用:

Plotting_Function <- function( ... , FigureFolder) {

  v_names <- as.list(match.call())
  #variable_list <- list(...)
  variable_list <- v_names[2:(length(v_names)-1)]

  for (i in 1:length(variable_list)) {

    if (variable_list[i] == "catg") print("category") # example

      #routine 1 will go here

    if (variable_list[i] != "catg") print(as.character(variable_list[i][[1]])) # example

      #routine 2 will go here

  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    相关资源
    最近更新 更多