从提供给函数的字符向量创建列表

时间:2013-12-20 12:01:05

标签: r function arguments

我想将变量传递给函数并将它们用作列表,并且我有一个函数将字符向量的项目拆分为“=”,并将它们放入列表中。当字符中包含等号时,它当然可以正常工作:

my.function <- function(x) {
  args <- x
  newl <- list()

 for ( i in 1:length(args) ) {
   keyval <- strsplit(args[[i]],"=")[[1]];
   key <- keyval[1]; val <- keyval[2];
   newl[[ key ]] <- val;
 }
 return(newl)
}

char<- c("name=value_1", "title=title", "show=show")

my.function(char)

$name
[1] "value_1"

$title
[1] "title"

$show
[1] "show"

然后我可以通过这样做在函数内部使用这些参数:

args[['title']]

但我想将变量传递给函数,而不仅仅是字符。所以我希望这个功能在我这样做时能够工作:

value_1 = "A"
show= TRUE
title= paste("This is my title for ", value_1, sep="")

my.function(name=value_1, title=title, show=show)

我可以粘贴这样的值:

char= c( paste("name=", value_1, sep=""), 
         paste("title=", title, sep=""), 
         paste("show=", show, sep=""))

但我想知道是否有更好的方法将这些变量作为参数传递给函数。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

您可以使用...

my.function <- function(...) list(...)

此函数只根据使用的参数创建一个列表。

value_1 <- "A"
show <- TRUE
title <- paste("This is my title for ", value_1, sep="")


my.function(name = value_1, title = title, show = show)
$name
[1] "A"

$title
[1] "This is my title for A"

$show
[1] TRUE

此函数根据函数调用的参数生成字符向量:

my.function <- function(...) {
  argList <- list(...)
  res <- paste(names(argList), unlist(argList), sep = "=")
  return(res)     
}

my.function(name=value_1, title=title, show=show)
[1] "name=A"                       "title=This is my title for A" "show=TRUE" 

此功能与您的功能类似。它说明了如何访问函数调用的参数:

my.function <- function(...) {
  argList <- list(...)
  newl <- list()
  for (i in seq_along(argList)) {
    key <- names(argList)[i]
    val <- argList[[i]]
    newl[[key]] <- val
  }
  return(newl)    
}

my.function(name = value_1, title = title, show = show)
$name
[1] "A"

$title
[1] "This is my title for A"

$show
[1] TRUE