Gary Collins
2006-Dec-03 22:28 UTC
[R] passing an argument to a function which is also to be a dataframe column name
any suggestions on the following gratefully welcome, I have a dataframe, which I am subsetting via labels atpi[, creativity] where (for example) atpi = as.data.frame(matrix(1:50, ncol = 5, nrow = 10)) names(atpi) = c("Q1", "Q2", "Q3", "Q4", "Q5") and creativity = c("Q1", "Q3", "Q4") I want to add an extra column to the dataframe atpi labelled "creativity", which is the rowsum of these 3 columns. My problem is not the rowsum but but the passing of an argument to a function, which is being used for subsetting but also for labelling the rowsum column. I can do a one-off hack for creativity, but I want to generalise this, as I have numerous subsets like creativity) to calculate and some pre-processiing (imputing missing data etc)... so I'm looking for something simple along the lines of scoring = function(x, A){ x[, A] = rowSums(x[, A]) x } where a call such as scoring(atpi, creativity) would produce something along the lines of> atpiQ1 Q2 Q3 Q4 Q5 creativity 1 1 11 21 31 41 53 2 2 12 22 32 42 56 3 3 13 23 33 43 59 4 4 14 24 34 44 62 5 5 15 25 35 45 65 6 6 16 26 36 46 68 7 7 17 27 37 47 71 8 8 18 28 38 48 74 9 9 19 29 39 49 77 10 10 20 30 40 50 80 Thanks in advance Gary
Prof Brian Ripley
2006-Dec-03 22:46 UTC
[R] passing an argument to a function which is also to be a dataframe column name
I think you want scoring <- function(x, A){ nm <- deparse(substitute(A)) x[, nm] <- rowSums(x[, A]) x } On Sun, 3 Dec 2006, Gary Collins wrote:> any suggestions on the following gratefully welcome, > > I have a dataframe, which I am subsetting via labels > > atpi[, creativity] > > where (for example) > > atpi = as.data.frame(matrix(1:50, ncol = 5, nrow = 10)) > names(atpi) = c("Q1", "Q2", "Q3", "Q4", "Q5") > > and > > creativity = c("Q1", "Q3", "Q4") > > I want to add an extra column to the dataframe atpi labelled "creativity", > which is the rowsum of these 3 columns. My problem is not the rowsum but > but the passing of an argument to a function, which is being used for subsetting > but also for labelling the rowsum column. I can do a one-off hack for > creativity, > but I want to generalise this, as I have numerous subsets > like creativity) to calculate and some pre-processiing (imputing > missing data etc)... > so I'm looking for something simple along the lines of > > scoring = function(x, A){ > x[, A] = rowSums(x[, A]) > x > } > > where a call such as > > scoring(atpi, creativity) > > would produce something along the lines of > >> atpi > Q1 Q2 Q3 Q4 Q5 creativity > 1 1 11 21 31 41 53 > 2 2 12 22 32 42 56 > 3 3 13 23 33 43 59 > 4 4 14 24 34 44 62 > 5 5 15 25 35 45 65 > 6 6 16 26 36 46 68 > 7 7 17 27 37 47 71 > 8 8 18 28 38 48 74 > 9 9 19 29 39 49 77 > 10 10 20 30 40 50 80 > > Thanks in advance > > Gary > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595