[R] Error: missing values where TRUE/FALSE needed

Joshua Wiley jwiley.psych at gmail.com
Thu Jun 9 06:49:44 CEST 2011


Hi Abraham,

mylist <- list(roots = "car", prefix = "cheap")
myfoo <- function(x) {
  print(mylist$x)
}

myfoo(roots) ## fails, but in a "sneaky" way
## you actually extract variable x from mylist
## but there is no variable x (it is just NULL)
## so while no error is thrown, you get nothing

myfoo <- function(x) {
  print(mylist[[x]])
}

myfoo(roots) ## still fails but...
myfoo("roots") ## works

So I would rewrite 'myone' and 'mytwo' to use: lst[[x]] and then put
the quotes around the names
mytwo("prefix", "roots2", "suffix") etc.

Also look at ?debug to see ways to debug your function so you can more
easily find where the problem starts rather than what the final death
blow was.  The usage is simple, just:

debug(myfunc) ## now next time myfunc() is called, it will be debugged

myfunc(lst) ## and off you go

Hope this helps,

Josh


On Wed, Jun 8, 2011 at 8:45 PM, Abraham Mathew <abmathewks at gmail.com> wrote:
> I'm writing a function and keep getting the following error message.
>
> myfunc <- function(lst) {
> lst <- list(roots = c("car insurance", "auto insurance"),
> roots2 = c("insurance"), prefix = c("cheap", "budget"),
> prefix2 = c("low cost"), suffix = c("quote", "quotes"),
> suffix2 = c("rate", "rates"), suffix3 = c("comparison"))
> myone <- function(x, y) {
> nu <- do.call(paste, expand.grid(lst$x, lst$y))
> mydf <- data.frame(keyword=c(nu))
> }
> mytwo <- function(x, y, z){
> mu <- do.call(paste, expand.grid(lst$x, lst$y, lst$z))
> mydf2 <- data.frame(keyword=c(mu))
> }
> d1 = mytwo(lst$prefix, lst$roots, lst$suffix)
> d2 = mytwo(lst$prefix, lst$roots, lst$suffix2)
> d3 = mytwo(lst$prefix, lst$roots, lst$suffix3)
> d4 = mytwo(lst$prefix2, lst$roots, lst$suffix)
> d5 = mytwo(lst$prefix2, lst$roots, lst$suffix2)
> d6 = mytwo(prefix2, roots, suffix3)
> d7 = mytwo(prefix, roots2, suffix)
> d8 = mytwo(prefix, roots2, suffix2)
> d9 = mytwo(prefix, roots2, suffix3)
> d10 = mytwo(prefix2, roots2, suffix)
> d11 = mytwo(prefix2, roots2, suffix2)
> d12 = mytwo(prefix2, roots2, suffix3)
> d13 = myone(prefix, roots)
> d14 = myone(prefix2, roots)
> d15 = myone(prefix, roots2)
> d16 = myone(prefix2, roots2)
> d17 = myone(roots, suffix)
> d18 = myone(roots, suffix2)
> d19 = myone(roots, suffix3)
> d20 = myone(roots2, suffix)
> d21 = myone(roots2, suffix2)
> d22 = myone(roots2, suffix3)
> d23 = myone(state, roots)
> d24 = myone(city, roots)
> d25 = myone(cityst, roots)
> d26 = myone(inscompany, roots)
> d27 = myone(state, roots2)
> d28 = myone(city, roots2)
> d29 = myone(cityst, roots2)
> d30 = myone(inscompany, roots2)
> d31 = mytwo(state, roots, suffix)
> d32 = mytwo(city, roots, suffix)
> d33 = mytwo(cityst, roots, suffix)
> d34 = mytwo(inscompany, roots, suffix)
> d35 = mytwo(state, roots, suffix2)
> d36 = mytwo(city, roots, suffix2)
> d37 = mytwo(cityst, roots, suffix2)
> d38 = mytwo(inscompany, roots, suffix2)
> d39 = mytwo(state, roots, suffix3)
> d40 = mytwo(city, roots, suffix3)
> d41 = mytwo(cityst, roots, suffix3)
> d42 = mytwo(inscompany, roots, suffix3)
> d43 = mytwo(state, roots2, suffix)
> d44 = mytwo(city, roots2, suffix)
> d45 = mytwo(cityst, roots2, suffix)
> d46 = mytwo(inscompany, roots2, suffix)
> d47 = mytwo(state, roots2, suffix2)
> d48 = mytwo(city, roots2, suffix2)
> d49 = mytwo(cityst, roots2, suffix2)
> d50 = mytwo(inscompany, roots2, suffix2)
> d51 = mytwo(state, roots2, suffix3)
> d52 = mytwo(city, roots2, suffix3)
> d53 = mytwo(cityst, roots2, suffix3)
> d54 = mytwo(inscompany, roots2, suffix3)
> d55 = mytwo(prefix, state, roots)
> d56 = mytwo(prefix, city, roots)
> d57 = mytwo(prefix, cityst, roots)
> d58 = mytwo(prefix, inscompany, roots)
> d59 = mytwo(prefix2, state, roots)
> d60 = mytwo(prefix2, city, roots)
> d61 = mytwo(prefix2, cityst, roots)
> d62 = mytwo(prefix2, inscompany, roots)
> d63 = mytwo(prefix, state, roots2)
> d64 = mytwo(prefix, city, roots2)
> d65 = mytwo(prefix, cityst, roots2)
> d66 = mytwo(prefix, inscompany, roots2)
> d67 = mytwo(prefix2, state, roots2)
> d68 = mytwo(prefix2, city, roots2)
> d69 = mytwo(prefix2, cityst, roots2)
> d70 = mytwo(prefix2, inscompany, roots2)
> mydf <- rbind(d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14,
> d15,
> d16, d17, d18, d19, d20, d21, d22, d23, d24, d25, d26, d27, d28, d29,
> d30, d31, d32, d33, d34, d35, d36, d37, d38, d39, d40, d41, d42, d43,
> d44, d45, d46, d47, d48, d49, d50, d51, d52, d53, d54, d55, d56, d57,
> d58, d59, d60, d61, d62, d63, d64, d65, d66, d67, d68, d69, d70)
> library(stringr)
> inscompany_match <- str_c(inscompany, collapse = "|")
> state_match <- str_c(state, collapse = "|")
> city_match <- str_c(city, collapse = "|")
> mydf$inscompany <- as.numeric(str_detect(mydf$keyword, inscompany_match))
> mydf$state <- as.numeric(str_detect(mydf$keyword, state_match))
> mydf$city <- as.numeric(str_detect(mydf$keyword, city_match))
> for (i in 1:nrow(mydf)) {
> Words = strsplit(as.character(mydf[i, 'keyword']), " ")[[1]]
> if(any(Words == 'Colorado')){
> if(Words[which(Words == 'Colorado') + 1] == 'Springs') mydf[i, 'state'] <- 0
> }
> if(any(Words == 'Virginia')){
> if(Words[which(Words == 'Virginia') + 1] == 'Beach') mydf[i, 'state'] <- 0
> }
> if(any(Words == 'Oklahoma')){
> if(Words[which(Words == 'Oklahoma') + 1] == 'City') mydf[i, 'state'] <- 0
> }
> if(any(Words == 'Kansas')){
> if(Words[which(Words == 'Kansas') + 1] == 'City') mydf[i, 'state'] <- 0
> }
> if(any(Words == 'Washington')){
> if(Words[which(Words == 'Washington') + 1] == 'DC') mydf[i, 'state'] <- 0
> }
> if(any(Words == 'York')){
> if(Words[which(Words == 'York') + 1] == 'City') mydf[i, 'state'] <- 0
> }
> if(any(Words == "Indianapolis")){
> mydf[i, 'state'] <- 0
> }
> if(any(Words == "AARP")){
> mydf[i, 'state'] <- 0
> }
> if(any(Words == "ANPAC")){
> mydf[i, 'state'] <- 0
> }
> if(any(Words == "AMICA")){
> mydf[i, 'state'] <- 0
> }
> if(any(Words == "GMAC")){
> mydf[i, 'state'] <- 0
> }
> if(any(Words == "USAA")){
> mydf[i, 'state'] <- 0
> }
> return(mydf)
> }
> }
>
>
> newdf <- myfunc(lst)
>
>
>> newdf <- myfunc(lst)
> Error in if (any(Words == "Colorado")) { :
> missing value where TRUE/FALSE needed
>
> What's going on?
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
>



-- 
Joshua Wiley
Ph.D. Student, Health Psychology
University of California, Los Angeles
http://www.joshuawiley.com/



More information about the R-help mailing list