用字符串替换列表值
Replacing a list value with a string
我有如下数据:
dat <- list(c(0, 25, 100, 250, 500, 1000, 1e+06))
我只是想用字符串值 "Infinity"
替换值 1000000
。尽管:
dat[1]
# [[1]]
# [1] 0 25 100 250 500 1000 1000000
dat[[1]
# [1] 0 25 100 250 500 1000 1000000
如果我尝试:
gsub(1000000, "Infinity", dat[[1]])
没有任何反应。为什么在这种情况下什么也没有发生,正确的方法是什么?
您需要将 RHS gsub
调用分配给 LHS 变量,可能是列表中的向量本身。但是,鉴于您的初始向量包含数值,您应该在此处使用相等性:
dat[[1]][dat[[1]] == 1000000] <- "Infinity"
dat
[[1]]
[1] "0" "25" "100" "250" "500" "1000" "Infinity"
如果你真的要使用gsub
,你需要设置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"
我们可以使用 rapply
。 rapply
是 lapply 的递归版本,在结果结构方面具有灵活性(how = "..")。参见 ?rapply
rapply(dat,function(x) ifelse(x==1000000,"Infinity",x), how = "replace")
[[1]]
[1] "0" "25" "100" "250" "500" "1000" "Infinity"
另一个使用 replace
和 lapply
的选项(尽管 rapply
比 lapply
更好):
lapply(dat, function(x) replace(x, x == 1000000, "Infinity"))
输出
[[1]]
[1] "0" "25" "100" "250" "500" "1000" "Infinity"
我有如下数据:
dat <- list(c(0, 25, 100, 250, 500, 1000, 1e+06))
我只是想用字符串值 "Infinity"
替换值 1000000
。尽管:
dat[1]
# [[1]]
# [1] 0 25 100 250 500 1000 1000000
dat[[1]
# [1] 0 25 100 250 500 1000 1000000
如果我尝试:
gsub(1000000, "Infinity", dat[[1]])
没有任何反应。为什么在这种情况下什么也没有发生,正确的方法是什么?
您需要将 RHS gsub
调用分配给 LHS 变量,可能是列表中的向量本身。但是,鉴于您的初始向量包含数值,您应该在此处使用相等性:
dat[[1]][dat[[1]] == 1000000] <- "Infinity"
dat
[[1]]
[1] "0" "25" "100" "250" "500" "1000" "Infinity"
如果你真的要使用gsub
,你需要设置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"
我们可以使用 rapply
。 rapply
是 lapply 的递归版本,在结果结构方面具有灵活性(how = "..")。参见 ?rapply
rapply(dat,function(x) ifelse(x==1000000,"Infinity",x), how = "replace")
[[1]]
[1] "0" "25" "100" "250" "500" "1000" "Infinity"
另一个使用 replace
和 lapply
的选项(尽管 rapply
比 lapply
更好):
lapply(dat, function(x) replace(x, x == 1000000, "Infinity"))
输出
[[1]]
[1] "0" "25" "100" "250" "500" "1000" "Infinity"