2015-12-10 6 views
-1

это часть блестящего приложения, эти значения пришли от реактивного ui/server, я сузил свою проблему на сервере.R, и я просто работаю с этой простой R, он должен правильно отражать мой вопрос. Я надеюсь, что сделать эта линия с < @> < < work ??? Я также пробовал, noquote, eval и ничего.Как добавить динамическое имя столбца в подмножество?

t <- data.frame(Titanic) 
inputparam = "Class" 
inputvalue = "2nd" 
c(inputparam, "=",inputvalue) 
noquote(inputparam) 

head(subset(t, Class ==inputvalue)) ## works OK 
head(subset(t, inputparam ==inputvalue)) ## <@>>< doesn't work !!!!! 
#temp <- quote(inputparam) 
#head(subset(t, eval(temp) == inputvalue)) 
+0

без воспроизводимого Например, можно только догадываться, в чем ваша проблема. Это может быть блестящий, R или ваши данные ... – plastikdusche

+0

Вероятно, вы должны избегать 'подмножества' с его нестандартной оценкой для этого и использовать' ['для подмножества. 'subset' документируется как предназначенное только для интерактивного использования. – Roland

ответ

1

eval с разбором работа

eval(parse(text=paste0("subset(t, ", inputparam, "=='", inputvalue, "')"))) 

inputvalue должен быть заключен как и с другой цитатой так, что parse распознает его как character.

В качестве альтернативы вы должны попробовать что-то вроде этого, (проверьте комментарии по причинам)

t[ t[colnames(t)==inputparam]==inputvalue, ] 
+0

... и позволяет просто надеяться, что 'inputvalue' никогда не имеет кавычек в нем, не так ли? Нет-нет-нет-нет-нет. Даже не ** предлагайте **, что 'eval' /' parse' может что-то сделать, если у вас есть другое решение, которое вы делаете. Вы только что дали кому-то термоядерное устройство, когда все, что им нужно, это молоток. – Spacedman

+0

Ха-ха ... Я просто ответил в пути, который пытался попробовать. Обновил мой ответ, чтобы ответить на вашу проблему. – jMathew

+0

О, я не видел их серого цвета, который я вижу сейчас, это их ядерная ракетная программа. – Spacedman

1

Получить кадр данных столбца с переменной значение с помощью двойных квадратных скобок, подмножество с использованием одиночных квадратных скобок. Это R 101:

head(t[ t[[inputparam]] ==inputvalue, ]) 

Так $ -signs получить столбцы по имени, которое является большим, и предпочтительным, если вы знаете имя заранее. Скобки в квадратных скобках оценивают содержимое в скобках и получают значение. Вы можете придерживаться любого выражения R там.

+0

Tx Spacedman и jM !!! что это тоже работает .... _head (subset (t, get (inputparam) == inputvalue)) _ –

Смежные вопросы