Allison Wiener
Allison Wiener

Reputation: 19

Writing Function

I'm writing a function for a data set called opps on part number sales data, and I'm trying to break the data down into smaller data sets that are specific to the part numbers. I am trying to name the data sets as the argument "modNum". Here is what I have so far-

# modNum (Modified Product Number) takes a product number that looks 
# like "950-0004-00" and makes it "opQty950.0004.00"
productNumber <- function(prodNum,modNum){

  path <- "C:/Users/Data/"
  readFile <- paste(path,"/opps.csv",sep="")
  oppsQty <- read.csv(file=readFile,sep=",")

  oppsQty$Line.Created.date <- as.Date(as.character(oppsQty$Line.Created),
                                      "%m/%d/%Y")

  modNum <- oppsQty[oppsQty$Part.Number=="prodNum",]
 }


productNumber(280-0213-00,opQty280.0213.00)
#Error: object 'opQty910.0002.01' not found

The line I believe I'm having problems with is

modNum <- oppsQty[oppsQty$Part.Number=="prodNum",]

and it's because in order for the code to work, there have to be parenthesis around prodNum, but when i put the parenthesis in the code, prodNum is no longer seen as the argument to be filled in. When i put the parenthesis inside the argument like this,-

productNumber(280-0213-00,"opQty280.0213.00") 

I still have a problem.
How can I get around this?

I have tried rewriting the oppsQty$Part.Number variable to be numeric (shown below) so that I can eliminate the parenthesis all together, but I still have errors...

 productNumber <- function(prodNum,nameNum){

     path <- "C:/Users/Data"
    readFile <- paste(path,"/opps.csv",sep="")
    oppsQty <- read.csv(file=readFile,sep=",")

    oppsQty$Line.Created.date <- as.Date(as.character(oppsQty$Line.Created),
                                         "%m/%d/%Y")

    #ifelse(oppsQty$Part.Number=="Discount", 
    #       oppsQty$Part.Number=="000000000", 
    #       oppsQty$Part.Number)

    oppsQty$Part <- paste(substr(oppsQty$Part.Number,1,3),
                          substr(oppsQty$Part.Number,5,8),
                          substr(oppsQty$Part.Number,10,11),sep = "")

    oppsQty$Part <- as.numeric(oppsQty$Part)

    oppsQty$Part[is.na(oppsQty$Part)] <- 0

    nameNum <- oppsQty[oppsQty$Part==prodNum,]

 }
> productNumber(401110201,opQty401.1102.01)

Warning message:
In productNumber(401110201, opQty401.1102.01) : NAs introduced by coercion

Help is much appreciated! Thank you!

Upvotes: 1

Views: 105

Answers (1)

mnel
mnel

Reputation: 115382

At the moment you are passing prodNum as a numeric value, thus

280-0213-00 is evaluated as 67 (280-213-0= 67)

You should pass (and consider) prodNum as a character string (as this is what you intend)

ie. "280-0213-00"

Upvotes: 2

Related Questions