Лучшим решением было бы вообще не использовать имена:
Ranking_Categoria<-function(d,var,category)
{
d$rank<-ave(var,category,FUN=rank)
return(d)
}
Тогда назовите это как
Ranking_Categoria(d,d$x,d$g)
Причина, по которой функция в вашем вопросе не сработала так, как вы думали, отчасти связана с тем, что синтаксис R и DWIM -несс для работы со строками отстой . Вот хакерское, хрупкое решение с использованием eval
и parse
:
Ranking_Categoria<-function(d,var,category)
{
string=paste('d$rank<-ave(d$',var,',d$',category,',FUN=rank)',sep="")
eval(parse(text=string))
return(d)
}
Однако вы все равно должны называть его
Ranking_Categoria(d,"x","g")
И если у вас уже есть объекты с именами x
и g
, тогда, возможно, боги помогут вам, если вы попытаетесь сделать Ranking_Categoria(d,x,g)
... Вот дерьмо, вот почему я отказался от использования Perl и R в равной степени придерживаться Perl (мой первый и родной язык программирования) и использовать R только при необходимости.