如何在R中将列表作为参数传递?

时间:2016-07-08 15:32:09

标签: r

我有一个函数grep,它可以无限制地组合月/年输入并为这些时段吐出天气数据。

我想通过速记做一些组合来使它更紧凑。例如,而不是

fetchWeather(city,month1,year1,...)

我想做

fetchWeather(Boston,4,2015,5,2015,6,2015,7,2015,8,2015,9,2015,10,2015)

然后致电

jv15<- c(4,2015,5,2015,6,2015,7,2015,8,2015,9,2015,10,2015)

但我不能让它发挥作用。

我对R很新,我想这是一个非常简单的解决方案,但我似乎无法弄明白。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

你的错误可能是波士顿没有引号,但假设波士顿真的是一个变量......

您可以使用'do.call'

获取一个函数和一个列表,并使用该列表作为参数调用函数。

首先,你想把波士顿放在你的名单上,然后再做.call。

out.weather <- do.call(fetchWeather, c(Boston,jv15))

答案 1 :(得分:0)

就个人而言,我更希望这种类型的函数定义为只有一个参数在省略号中重复(而不是两个)。

因此,我宁愿使用year参数来定义此函数,而不是使用monthdate。在这种情况下,您可以在内部将...转换为列表,并且可以通过date可以是单个日期或日期列表的方式定义函数。

请参阅下面的示例。

date <- c(2003,6)
date.list <- list(c(2001,4),c(2002,5))

fetchWeather <- function(city, date, ...){

  .date <- list(...)
  if(!is.list(date)) date <- list(date)

  date <- c(date,.date)

  out <- sapply(date,.internal.fetchWeather)
  return(out)

}
.internal.fetchWeather <- identity

fetchWeather("Boston", date.list, date, date+1, date+2)
#      [,1] [,2] [,3] [,4] [,5]
# [1,] 2001 2002 2003 2004 2005
# [2,]    4    5    6    7    8

请注意,由于您未在问题中提供任何代码,因此我不知道您的功能会做什么。

因此,我使用名为.internal.fetchWeather的函数作为占位符,以便为每个日期执行操作。在我的例子中,我只使用了身份功能,它将年份和月份打印到控制台。