2011-07-12 16 views
-1

関数内で評価される条件を含む変数を指定する関数を記述しています。たとえば、0、3、6、9、18、3、6、9、18 0、3、18 ...のような値を含むhourval変数があります。この0,6は他のパラメータに応じて変化する可能性があります。基本的にそれらは常に固定されていません。そこで変数g1 = call("which", (hourval==0 | hourval == 6))を渡します。私は、この声明がプログラムで評価されることを望みます。したがって、文x1 = eval(g1)を使用します。明らかに、変数g1を渡すと、その時間の変数は生成されませんが、eval(g1)ステートメントの直前に生成されます。エラーが発生し、オブジェクトhourvalが見つかりません。この問題を解決する他の方法はありますか?内部の呼び出しと評価関数R

ご協力いただきありがとうございます。

ナラヤニバーブ

+0

私は、あなたがそれらのパラメータをどのように取得するかを知ることができたら、あなたがやっていることをより深く知ることができると思います。小さな実用例は長い道のりになるでしょう。ここに少し援助することができる少しのポストがあります:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

+0

'subset.data.frame ';あなたの仕事を始めるのに役立つかもしれません。一方、問題を解決する別の方法について考えてみることもできます。あなたが概説した方法でソリューションは、しばしば彼らが価値があるよりもトラブルが多くなります。 – Aaron

+0

特に無関係のメーリングリストには投稿しないでください。https://stat.ethz.ch/pipermail/r-sig-geo/2011-July/012211.html – mdsumner

答えて

7

これはあなたの欲しいものですか?

> hourval <- c(0, 3, 6, 9, 18, 3, 6, 9, 18, 0, 3, 18) 
> test <- c(0,6) 
> which(hourval %in% test) 
[1] 1 3 7 10 

それは、この検索戦略

library(fortunes) 
fortune("parse") 

でそれを見つけるために私にしばらく時間がかかったが、最終的に私が思い出した1だ:私の難しさの一部は、その事実にあった

> fortune("parse") 

If the answer is parse() you should usually rethink the question. 
    -- Thomas Lumley 
     R-help (February 2005) 

を"eval(parse(" parse( "。

+0

あなたは時を超えた幸運のために余分なポイントを得るべきです。 –

+0

あなたは既に過去に投稿したことがあります。 LumleyはSOに約1000のボーナスポイントを与えられるべきです。 –

+1

ありがとうございますトーマス..最初のオプションは私のために働く。 "test"シーケンスをパラメータとして送信し、eval(g1)の代わりにwhich(hourval%in%test)文を使用することができます。ありがとうございました – Narayani

1

これはあなたが書いているようです。

f1 <- function(y) { 
    hourval <- c(0, 3, 6, 9, 18, 3, 6, 9, 18, 0, 3, 18) 
    eval(substitute(y)) 
} 
f1(which(hourval %in% c(0,6))) 

これは私が代わりにやっていることです。

f2 <- function(y) { 
    hourval <- c(0, 3, 6, 9, 18, 3, 6, 9, 18, 0, 3, 18) 
    which(hourval %in% y) 
} 
f2(c(0,6)) 

しかし、これらのいずれかが質問に答えるかどうかを知るにはまだ十分な情報がありません。

関連する問題