2017-02-16 4 views
0

から取得した関数に複数の引数を渡して説明しやすくするためにこれを試して単純化します。あなたが機能を持っているとしましょう:データフレーム

testfun = function(jID,kID,d){ 
    g=paste0(jID,kID) 
    date = d 
    bb=data.frame(g,date) 
    return(bb) 
} 

とデータフレーム:

x=data.frame(jID = c("a","b"),kID=c("c","d"),date="20170206",stringsAsFactors = FALSE) 

私は関数の入力に各行に合格したいと思います:

ので、サイクル1:

testfun(x[1,1],x[1,2],x[1,3]) -> return(bb) 

サイクル2:

testfun(x[2,1],x[2,2],x[2,3]) -> return(bb) 

私はmapply(testfun, x[,1],x[,2],x[,3])を使ってみましたが、要約を取り戻しています。

答えて

0

これはdplyrを使用したソリューションです。 キーは、行ごとにグループ化し、各行に対して関数を実行することです。 関数の出力は、使用した値の横にある新しいデータセットに新しい列を作成する必要があります。プロセスがdateとして新しい列date.1を作成すること

library(dplyr) 

testfun = function(jID,kID,d){ 
    g=paste0(jID,kID) 
    date = d 
    bb=data.frame(g,date) 
    return(bb) 
} 


x=data.frame(jID = c("a","b"),kID=c("c","d"),date="20170206",stringsAsFactors = FALSE) 


x %>% do(data.frame(.,          # keep row of your dataset 
        testfun(.$jID, .$kID, .$date)))  # run the function using the values of that row 

# jID kID  date g date.1 
# 1 a c 20170206 ac 20170206 
# 2 b d 20170206 bd 20170206 

ノートは、あなたの入力の一つのために存在します。あなただけの簡素化

mapply(testfun, x[,1],x[,2],x[,3], SIMPLIFY=FALSE) 

をオフにするよう

0

サウンドまた、あなたの機能

vtestfun <- (Vectorize(testfun, SIMPLIFY=FALSE)) 
vtestfun(x[,1],x[,2],x[,3]) 
をベクトル化することができます