2016-06-02 4 views
0

Я кладу вместе функция R, которая занимает некоторое неопределенное вход через ... аргумента, описанным в docs как: специальной переменнойРабота с «...» вход в функции R

«...» длина аргумента ***

Идея состоит в том, что пользователь вводит здесь несколько имен столбцов, каждый из которых относится к набору данных, также указанному пользователем. Затем эти столбцы будут перекрестно табулированы по сравнению с зависимой переменной на tapply. Функция состоит в том, чтобы возвращать таблицу (независимая переменная x независимая переменная).

Таким образом, я попытался:

plotter=function(dataset, dependent_variable, ...) 

{ 


indi_variables=list(...); # making a list of the ... input as described in the docs 
result=with (dataset, tapply(dependent_variable, indi_variables, mean); # this fails 

} 

Я полагал, что это должно работать как tapply может взять список в качестве входных данных. Но это не так («Ошибка в использовании ... аргументы должны иметь такую ​​же длину»), и я думаю, что это потому, что indi_variables - это список строк. Если я ввожу содержимое списка вручную и не оставляю кавычки, все работает отлично.

Однако, если пользователь подает функцию, имена столбцов не являются строками, R будет интерпретировать их как имена переменных; и я не могу понять, как преобразовать список indi_variables в правильном направлении, но безуспешно пытаясь что-то вроде этого:

indi_variables=lapply(indi_variables, as.factor) 

Так мне интересно,

  • Что вызывает описанные выше ошибки? Является ли моя интерпретация правильной?
  • Как можно преобразовать список, созданный с помощью ... в правильном направлении?
  • Есть ли лучший способ сделать это, во входном или в исполнении tapply?

Любая помощь очень ценится!

+3

Вы, вероятно, следует прочитать [это] (http://adv-r.had.co .nz/Computing-on-the-language.html) в книге Хэдли (читайте ее медленно и несколько раз, это сложная тема). – joran

ответ

0

Благодаря полезным чтением Joran, я придумал эти улучшения, чем делают вещи удаются ...

indi_variables=substitute(list(...)); 

result=with (dataset, tapply(dependent_variable, eval(indi_variables, dataset), FUN=mean)); 
Смежные вопросы