2016-07-08 7 views
2

私は月間/年の入力を無制限に組み合わせ、それらの期間の気象データを吐き出す関数fetchWeather(city,month1,year1,...)を持っています。Rを引数としてリストを渡すにはどうすればよいですか?

いくつかの組み合わせを簡略化して少しコンパクトにしたいと思います。そう例えば、むしろ

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) 

を行い、その後、

fetchWeather(Boston,jv15) 

を呼び出すしたいのですが、私はこれを動作させることはできません。

私はRには新しく、これはかなり簡単に解決できると想像していますが、私はそれを理解できないようです。どんな助けもありがとう。

+0

関数定義を 'fetchWeather(city、dates)'に変更し、関数内の 'dates'ベクトルを解析して個々の月と年を取得します。 – ytk

+0

Rの新しい人にとって、無限の引数を取る関数を書く方法を知っていても、かなり印象的です。しかし、関数が 'data.frame(city =" Boston "、月= 4:10、年= 2015L)の列のようにargsを取るようにベクトル化されていれば、よりクリーンなものになると思います。とにかく、あなたの直接の問題はおそらく 'do.call'で対処することができます。 – Frank

+0

ytk、それはyy-mm形式でも機能しますか?すなわち、文字列として、または日付/時刻として格納されているかどうか(少なくとも、異なる言語でどのように意味をなされるか)である。 ...私は今理解している – jsg51483

答えて

1

あなたのエラーはボストンが引用符ではありませんが、あなたが「do.call」を使用することができます...ボストンが本当に変数であることを

を想定し

が機能し、リストや通話を取ることかもしれませんそのリストを引数として持つ関数

まず、ボストンをあなたのリストに追加してからdo.callを追加したいと思うでしょう。個人

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

、Iは、(代わりに両者の)省略記号で繰り返されるだけ引数が存在するように定義される関数のこのタイプを好むだろう。

yearmonthの代わりに、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という名前の関数を、各日付に対して何をしたいのかを表すプレースホルダとして使用しました。私の例では、コンソールに年数と月数を表示するアイデンティティ関数を使用しました。

関連する問題