我有一个函数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很新,我想这是一个非常简单的解决方案,但我似乎无法弄明白。任何帮助表示赞赏。
答案 0 :(得分:1)
你的错误可能是波士顿没有引号,但假设波士顿真的是一个变量......
您可以使用'do.call'
获取一个函数和一个列表,并使用该列表作为参数调用函数。
首先,你想把波士顿放在你的名单上,然后再做.call。
out.weather <- do.call(fetchWeather, c(Boston,jv15))
答案 1 :(得分:0)
就个人而言,我更希望这种类型的函数定义为只有一个参数在省略号中重复(而不是两个)。
因此,我宁愿使用year
参数来定义此函数,而不是使用month
和date
。在这种情况下,您可以在内部将...
转换为列表,并且可以通过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
的函数作为占位符,以便为每个日期执行操作。在我的例子中,我只使用了身份功能,它将年份和月份打印到控制台。