Вызов и функция Eval внутри R - PullRequest
0 голосов
/ 13 июля 2011

Я пишу функцию, в которой я хочу предоставить переменную, которая содержит условие для оценки внутри функции.Например, у меня есть переменная hourval, содержащая такие значения, как 0, 3, 6, 9, 18, 3, 6, 9, 18 0, 3, 18 ... Я хочу выбрать индексы, где переменная hourval соответствует 0, 6Это 0, 6 может меняться в зависимости от некоторых других параметров.В основном они не всегда исправлены.Поэтому я передаю переменную g1 = call("which", (hourval==0 | hourval == 6)).Я хочу, чтобы это утверждение было оценено в программе.Поэтому я использую утверждение x1 = eval(g1).Очевидно, что когда я передаю переменную g1, эта переменная timeval не генерируется, но генерируется непосредственно перед оператором eval(g1).Я получаю ошибку, объект hourval не найден.Есть ли другой способ решить эту проблему.

Заранее спасибо, любая помощь приветствуется.

Нараяни Барве

Ответы [ 2 ]

7 голосов
/ 13 июля 2011

Это то, что вы хотите?

> 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")

, но в итоге я получил тот, который запомнил:

> fortune("parse")

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

Часть моих трудностей заключалась в том, что я запомнил цитату как «eval (parse (».

).
1 голос
/ 13 июля 2011

Это то, что вы, кажется, описываете

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) )

Но, опять же, пока недостаточно информации, чтобы узнать,из них отвечают на вопрос.

...