В R объект формулы является символическим, и его довольно сложно разобрать. Тем не менее, мне нужно, чтобы разобрать такую формулу в явном набор меток для использования вне R.Использование R для интерпретации символической формулы для внешнего использования
(1)
f
Позволить представляют model formulae, в котором ответ не указан, например, ~V1 + V2 + V3
, одна вещь, которую я попытался было:
t <- terms(f)
attr(t, "term.labels")
Однако, это не получить то, что именно явное, если некоторые из переменных в f
категоричны. Например, пусть V1
- это категориальная переменная с двумя категориями, то есть логическая, и пусть V2
будет двойной.
Следовательно, модель, заданная ~V1:V2
, должна иметь 2 параметра: «перехват» и «xyes: z». Между тем, модель, заданная ~V1:V2 - 1
, должна иметь параметры «xno: z» и «xyes: z». Однако, без способа сообщить функции terms()
, какие переменные являются категориальными (и сколько категорий), не имеет возможности их интерпретировать. Вместо этого он просто имеет V1:V2
в своих «terms.labels», что ничего не значит в контексте, что V1
категоричен.
(2)
С другой стороны, используя model.matrix
простой способ, чтобы получить именно то, что я хочу. Проблема в том, что для этого требуется аргумент data
, что плохо для меня, потому что я хочу только ясную интерпретацию символической формулы для использования вне R. Этот метод получения этого будет тратить много времени (сравнительно), потому что R должен читать данные из внешнего источника, когда все, что ему действительно нужно знать для формулы, - это переменные, которые являются категориальными (и сколько категорий) и какие переменные удваиваются.
Можно ли использовать «model.matrix» только с указанием типов данных, а не фактических данных? Если нет, то что еще является жизнеспособным решением?
Спасибо за быстрый ответ. У меня действительно есть набор данных, но он большой и вне R, поэтому чтение - это то, что снижает эффективность. То, что у вас есть в первой части, выглядит великолепно, но я не понимаю, что 'model.matrix (f, data = V1Factor)' создает 3 соответствующих параметра, когда у него не должно быть 'V1no: V2', как там является перехватом. –
R, как известно, неохотно удаляет параметры нижнего порядка, когда присутствуют взаимодействия, возможно, это причина: http://stackoverflow.com/q/11335923/289572 – Henrik
@JonClaus Я думаю, что он должен иметь три параметра: перехват, наклон 'V2', когда' V1' нет, и наклон 'V2', когда' V1' - да (способ здесь параметризуется). Вы также можете получить 3 параметра с перехватом, наклон 'V2', когда' V1' нет, и изменение наклона 'V2', когда' V1' изменяется от нет до да. Однако вы его параметризируете, есть 3 параметра. –