我想将变量传递给函数并将它们用作列表,并且我有一个函数将字符向量的项目拆分为“=”,并将它们放入列表中。当字符中包含等号时,它当然可以正常工作:
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=""))
但我想知道是否有更好的方法将这些变量作为参数传递给函数。谢谢你的帮助!
答案 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