как передать параметры в subset ()? - PullRequest
7 голосов
/ 27 августа 2010

Я создаю графический интерфейс, который позволяет мне выбирать подмножество data.frame, нажимая на названия различных факторов.После получения пользовательского ввода, как я могу передать его в функцию подмножества?

Например: у меня есть фрейм данных df с коэффициентами УТРО и ВЕЧЕР в столбце timeofday, а также ПОЛУЧИТЬ и ОТПРАВИТЬ в столбце optype.Из GUI я знаю, что пользователь хочет подмножество, содержащее только операции RECEIVE, поэтому у меня есть также следующие строки:

RequestedFactor1, который равен "optype"
RequestedRelationship1 равно "=="
RequestedValue1, равный «RECEIVE»

Что я могу сделать с этими строками, чтобы передать их подмножеству, чтобы я получал такой же вывод, как если бы я вызвал subset (df, optype == "RECEIVE") ?

TIA

Ответы [ 2 ]

5 голосов
/ 27 августа 2010

Для этого вы можете использовать конструкцию eval-parse, но еще раз предупреждаю, что это действительно сложный бизнес. Пожалуйста, прочитайте справочные файлы об этих двух очень внимательно. Так что в вашем случае это становится:

subset(df,eval(parse(text=paste(RF1,RR1,RV1)))) 

Пример, иллюстрирующий некоторые хитрые части:

> RF1 <- "optype"

> RR1 <- "=="

> RV1 <- "\"RECEIVE\""

> optype <- c("RECEIVE","Not")

> ifelse(eval(parse(text=paste(RF1,RR1,RV1))),1,0)
[1] 1 0

Запомните экранированные кавычки (\ "). Это необходимо, если вы хотите проверить строку, а не объект RECEIVE. Также вы можете сделать:

> RF1 <- "optype"

> RR1 <- "=="

> RV1 <- "Text"

> optype <- c("RECEIVE","Not")

> Text <- "RECEIVE"

> ifelse(eval(parse(text=paste(RF1,RR1,RV1))),1,0)
[1] 1 0
4 голосов
/ 27 августа 2010

Операторы сравнения в R на самом деле являются специальными функциями, поэтому вы можете использовать do.call для запуска функций, не требуя eval и parse, и потенциальных потенциальных проблем, которые могут возникнуть от этого. e.g.:

rf1 <- 'Species'
rr1 <- '=='
rv1 <- 'setosa'

subset(iris, do.call(rr1, list( get(rf1), rv1 ) ) )

Вам нужно «получить» переменную, чтобы у вас было значение переменной, а не имя, остальные могут быть символьными строками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...