2011-07-26 21 views
88

私はvar2 = 1を設定し、のリストに関数f()を適用したいと考えていますが、関数にはf(var1, var2)があります。基本的に私は、私はapplymapplyまたはlapplyのいずれかでこれを行うにはどうすればよい複数のパラメータを持つR関数を適用する

[f(L[1],1),f(L[2],1),...,f(L[n],1)] 

出力で新しいリストL *を取得したいですか?

+0

同様の質問:http://stackoverflow.com/questions/2545879/row-column-counter-in-apply-functions/28102021#28102021 –

答えて

127

apply関数の1つに余分な引数としてvar2を渡すだけです。

mylist <- list(a=1,b=2,c=3) 
myfxn <- function(var1,var2){ 
    var1*var2 
} 
var2 <- 2 

sapply(mylist,myfxn,var2=var2) 

これはmyfxnのすべての呼び出しに同じvar2を渡します。代わりに、myfxnの各通話が1/2/3/etcを取得したい場合は、要素がmylistvar2の場合、mapplyのドメインに属しています。

+4

しかし、 'myfxn'が、その場合には、ベクトル化することができることに注意してください'myfxn(unlist(mylist)、var2 = var2) 'を使うべきです。 – baptiste

+0

元の例は不明ですが、ベクトル化されていないようです。しかし、よく取られた点。 –

+0

この作業を「オンザフライ」機能として機能させる方法はありますか?このような何か: 'sapply(mylistという、機能(VAR1、VAR2){ VAR1 * VAR2 }、VAR = thisvar2)' しかし、私はエラーを取得する引数2一致していることを複数の仮引数私はそこに問題を考える – emudrak

8

あなたの関数は次のようにmapplyを使用することができます(@Ari B.フリードマンで述べたように)2つのベクトル変数を持ち、それらの各値に自分自身を計算しなければならない場合:

あなたを与える
vars1<-c(1,2,3) 
vars2<-c(10,20,30) 
mult_one<-function(var1,var2) 
{ 
    var1*var2 
} 
mapply(mult_one,vars1,vars2) 

> mapply(mult_one,vars1,vars2) 
[1] 10 40 90 
-4

RODBCを使用してOracle XE hrスキーマに接続しました。テーブルのレコード数を返す関数が必要でした。だから...

function(rodbcConnection, schemaName, tableName){ 
    results <- sqlQuery(rodbcConnection, paste("SELECT * FROM ", schemaName, ".", tableName)) 
    return(dim(results)[1]) 
} 

しかし、これをテーブル名のベクトルにどのように適用するのですか?方法は次のとおりです。

> x <- sapply(hrTableNames, noOfRecords, rodbcConnection=connection, schemaName="hr") 

sapplyがhrTableNamesの各行に機能noOfRecordsを適用し、その作業を行うように、RはhrTableNamesの現在の反復値が欠落しているパラメータtableNameのを代入します。

最後に、

> barplot(t(x), las=2) 
関連する問題