2016-06-21 7 views
1

ループの代わりに自分のコードでapply関数を使用する必要があります。サンプルコードと関数があります。ここでR:ループの代わりに以下のコードでapply関数を使用する方法

が私のデータである。ここ

testdata<-data.table(x1=sample(1000),y1=sample(1000),x2=sample(1000),y2=sample(1000),h=sample(1000)) 

は私の関数は、forループと私の現在のコードは、私がlapplyとsapplyを使用してみましたが、存在している

resultdf<-data.frame(d=NA,R=NA,x=NA,y=NA) 
for (i in 1:nrow(reqdata.LN)){ 
    resultdf[i,]<-testfunction(x0=1.2,y0=2.1,testdata$x1[i],testdata$x2[i], 
           testdata$y1[i],testdata$y2[i],testdata$h[i]) 
} 

ある

testfunction<-function(x0,y0,x1,y1,x2,y2,h){ 
    x<-x0+x1+x2+y0+y1+y2 
    y<-x+x0+y0 
    d<-x+y 
    R<-x+y+d 
    result <- data.frame(d,R,x,y) 
    return (result) 
} 

ですエラー数が少ない

bb<-lapply(1:nrow(testdata),testfunction,x0=1.2,y0=2.1,testdata$x1[i],testdata$x2[i], 
      testdata$y1[i],testdata$y2[i],testdata$h[i]) 

この適用機能の使い方を教えてください。

答えて

5

私たちがdata.tableを持っているので、+がベクター化されているので、この機能を直接適用することができます。

res <- testdata[, testfunction(x0=1.2, y0=2.1, x1, y1, x2, y2, h)] 
head(res) 
#  d  R  x  y 
#1 3923.9 7847.8 1960.3 1963.6 
#2 2689.9 5379.8 1343.3 1346.6 
#3 4523.9 9047.8 2260.3 2263.6 
#4 3535.9 7071.8 1766.3 1769.6 
#5 3183.9 6367.8 1590.3 1593.6 
#6 3677.9 7355.8 1837.3 1840.6 

注:OPの投稿の関数は、data.frameを返します。我々はdata.tableを使用している場合は、それは

testfunction<-function(x0,y0,x1,y1,x2,y2,h){ 
    x<-x0+x1+x2+y0+y1+y2 
    y<-x+x0+y0 
    d<-x+y 
    R<-x+y+d 
    list(d= d,R=R,x= x,y = y) 

} 

head(testdata[, testfunction(x0=1.2, y0=2.1, x1, y1, x2, y2, h)]) 
#  d  R  x  y 
#1: 3923.9 7847.8 1960.3 1963.6 
#2: 2689.9 5379.8 1343.3 1346.6 
#3: 4523.9 9047.8 2260.3 2263.6 
#4: 3535.9 7071.8 1766.3 1769.6 
#5: 3183.9 6367.8 1590.3 1593.6 
#6: 3677.9 7355.8 1837.3 1840.6 
+0

おかげでakrun data.table対象になるように、listとしてそれを返すことをお勧めします。実際には上記の関数は例であり、ループとデータテーブルコードの両方で同じ結果を示しています。しかし、私の実際の関数では、forループとデータテーブルコードで異なる結果が得られます。あなたはそれについて何か考えていますか? – PPC

+0

@PPC '+'で作成した関数はベクトル化されています。あなたの実際の機能はそうでないかもしれません。元の問題を模倣した関数で新しい投稿を作成する必要があるかもしれません。 – akrun

+0

はい私の実際の機能はこの単純ではなく、少し複雑です。データは機密情報なので共有できません。適用関数を介して機能するために、行の各要素を渡す方法はありますか? – PPC

関連する問題