2017-12-03 7 views
0

外部関数を使用して3Dサーフェスを取得しようとしました。そして、私が定義した関数はdata.frameのcolumnを参照します。以下は再現性のある簡単なコードです。データフレーム参照を含む関数を使用した外部関数エラー

あるtest.txtは

a b c 
    1 0 0 
    2 0 0 
    3 0 0 
    6 0 0 
    4 0 0 

であり、コードがエラーとして示さ

test<- read.table(file="test.txt",header=TRUE) 

testf<-function(q,w){ 
test$b<-q 
test$c<-w 
sum(test$b)+sum(test$c) 
} 

x<-seq(1,10,by = 1) 
y<-seq(0,30,by = 1) 

z<-outer(x,y,testf) 

結果は、機能自体はtestf(1,1)動作するので何ら問題はないようで

Error in `$<-.data.frame`(`*tmp*`, "b", value = c(1, 2, 3, 4, 5, 6, 7, : 
replacement has 310 rows, data has 5 

5.stop(sprintf(ngettext(N, "replacement has %d row, data has %d", 
"replacement has %d rows, data has %d"), N, nrows), domain = NA) 

4.`$<-.data.frame`(`*tmp*`, "b", value = c(1, 2, 3, 4, 5, 6, 7, 
8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 
8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 
8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, ... 

3.`$<-`(`*tmp*`, "b", value = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ... 

2. FUN(X, Y, ...) 

1. outer(x, y, testf) 

あります

> testf(1,1) 
[1] 10 

アドバイスありがとうございます!

+0

を生成するための唯一の方法だと思います。これはまさにあなたがやりたいことですか?なぜなら、行の数は等しくなければならないからです。 – SirSaleh

+0

はい私がしようとしていたのは、列データを変更してデータフレームに基づいて計算された各ユーザー定義の関数結果を得ることです(実際のコードでは、MAPLLYを使用してデータフレーム列から入力データを取得します)。 Z軸の結果を得るには唯一の方法ですか? –

+0

また、アウターと同様に動作する他の機能はありますか? –

答えて

0

私はfor loopはあなたが定義されtest` data.frameが `` 5`行を持っていますが、 '10'の行数値ベクトルで置き換えたいのz軸の値

関連する問題