I have data as follows:
dat <- list(c(0, 25, 100, 250, 500, 1000, 1e 06))
I am simply trying to replace the value 1000000 with the string value "Infinity". Even though:
dat[1]
# [[1]]
# [1] 0 25 100 250 500 1000 1000000
dat[[1]
# [1] 0 25 100 250 500 1000 1000000
If I try:
gsub(1000000, "Infinity", dat[[1]])
Nothing happens. Why does nothing happen in this case and what would be the right way to do this?
CodePudding user response:
You need to assign the RHS gsub call to a LHS variable, probably the vector itself inside the list. But, given that your initial vector contains numerical values, you should instead use equality here:
dat[[1]][dat[[1]] == 1000000] <- "Infinity"
dat
[[1]]
[1] "0" "25" "100" "250" "500" "1000" "Infinity"
CodePudding user response:
We could use rapply. rapply is a recursive version of lapply with flexibility in how the result is structured (how = ".."). See ?rapply
rapply(dat,function(x) ifelse(x==1000000,"Infinity",x), how = "replace")
[[1]]
[1] "0" "25" "100" "250" "500" "1000" "Infinity"
CodePudding user response:
If you really want to use gsub, you need to set fixed = TRUE.
dat <- list(c(0, 25, 100, 250, 500, 1000, 1e 06))
dat[[1]] <- gsub(1000000, "Infinity", dat[[1]], fixed = T)
dat
[[1]]
[1] "0" "25" "100" "250" "500" "1000"
[7] "Infinity"
CodePudding user response:
Another option using replace and lapply (though rapply is the better choice over lapply):
lapply(dat, function(x) replace(x, x == 1000000, "Infinity"))
Output
[[1]]
[1] "0" "25" "100" "250" "500" "1000" "Infinity"
