I am having trouble understanding how to use sapply (or similar functions) with a user defined function with multiple parameters.
I have the following functions defined q1.ans <- function(x) { retVal = 0 if (x == 1) { retVal = 1 } else if (x ==2) { retVal = 2 } return (retVal) } q2.ans <- function(x) { retVal = 0 if (x == 1) { retVal = 1 } else if (x ==2) { retVal = 3 } return (retVal) } q3.ans <- function(x) { retVal = 0 if (x == 1) { retVal = 2 } else if (x ==2) { retVal = 3 } return (retVal) } evaluate.questions <- function(q.1,q.2,q.3) { a <- q1.ans(q.1) b <- q2.ans(q.2) c <- q3.ans(q.3) retVal = 0 # Set default value to be no preference # The following code only implements those values from the state machine that show a preference (ID's 5,9,11,13-15,17-18,21,23-27) if (a == 0) { if (b == 1) { if (c == 1) { retVal = 1 # State machine ID 5 } } else if (b == 2) { if (c == 2) { retVal = 2 # State machine ID 9 } } } else if (a == 1) { if (b == 0) { if (c == 1) { retVal = 1 # State machine ID 11 } } else if (b == 1) { retVal = 1 # State machine ID's 13-15, value of C doesn't matter } else if (b == 2) { if (c == 1) { retVal = 1 # State machine ID 17 } else if (c == 2) { retVal = 2 # State machine ID 18 } } } else if (a == 2) { if (b == 0) { if (c == 2) { retVal = 2 # State machine ID 21 } } else if (b == 1) { if (c == 1) { retVal = 1 # State machine ID 23 } else if (c == 2) { retVal = 2 # State machine ID 24 } } else if (b == 2) { retVal = 2 # State machine ID's 25-27, value of C doesn't matter } } return (retVal) } And a data set that looks like this: ID,Q1,Q2,Q3 1,2,2,2 2,2,1,1 3,1,1,1 4,1,2,2 5,2,2,1 6,1,2,1 ... I have been researching and it appears that I should be using the sapply function to apply the evaluate.question function above to each row in the data frame like this preferences <- sapply(df, evaluate.questions, function(x,y,z) evaluate.questions(df['Q1'],df['Q2'],df['Q3'])) Unfortunately this doesn't work and the problem appears that the sapply function is not feeding the parameters to the evaluate.questions function as I expect. Can someone provide some guidance on what I am doing wrong? This is the error message I am getting: Error in x --1 : Comparison (1) is possible only for atomic and list types In addition: warning messages: In if (x == 1) { : the condition has length > 1 and only the first element will be used [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org 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.