将包括“ ^”运算符的字符向量转换为数字

时间:2019-05-08 08:10:49

标签: r

我有一个由数字和字符组成的矢量,它们被视为字符,例如:

mix <- c("50", ">10^4", "<10", "325") 

我了解如何剥离><并应用as.numeric()。但是,这将导致NA的{​​{1}}值。

我尝试使用"10^4",但这不起作用,只是返回字符。

当前,我的功能是:

eval("10^4")

是否可以添加使用f_convert2numeric <- function(vec){ nvec = eval(as.numeric(gsub(">","",gsub("<","",vec)))) return(nvec) } 将字符转换为数字的功能?最好以^为基数,但对替代方法感到满意。

1 个答案:

答案 0 :(得分:2)

使用:

sapply(gsub("[<>]", "", mix), function(x) eval(parse(text = x)), USE.NAMES = FALSE)

给予:

[1]    50 10000    10   325

如果省略USE.NAMES = FALSE,则会得到一个命名向量:

   50  10^4    10   325 
   50 10000    10   325

可能值得考虑将vapply胜过sapplysee here for an explanation why this is safer):

vapply(gsub("[<>]", "", mix), function(x) eval(parse(text = x)),
       FUN.VALUE = 1, USE.NAMES = FALSE)