[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