as.numeric("10^3") 警告消息:强制引入的 NA
as.numeric("10^3") Warning message: NAs introduced by coercion
试图将此向量强制转换为数字:
vec <- c("10^2", "10^3", "10^6", "", "10^9")
vec <- as.numeric(vec)
[1] NA NA NA NA NA
Warning message:
NAs introduced by coercion
所需输出:
[1] “100” “1000” “1e+06” “” “1e+09”
这里,我们可以使用eval(parse
,因为它是一个表达式
lst1 <- lapply(vec, function(x) eval(parse(text = x)))
lst[sapply(lst1, is.null)] <- NA
unlist(lst1)
#[1] 1e+02 1e+03 1e+06 NA 1e+09
或者以紧凑的方式,replace
空格 (""
) 与 NA
然后执行 eval(parse
sapply(replace(vec, vec == "", NA), function(x) eval(parse(text = x)))
或者另一种选择是 read
和 read.table
使用 sep
作为 ^
然后使用
with(read.table(text = paste(vec, collapse="\n"), sep="^", header = FALSE), V1^V2)
或按照@d.b的建议
read.table(text = paste(gsub("0\^", "e", replace(vec, vec == "", NA)),
collapse="\n"), header = FALSE)
在 ^
处拆分字符串,然后分别强制转换每个部分。我们必须使用 \
进行转义,因为 ^
是一个特殊的正则表达式字符。
sapply(strsplit(vec, "\^"), function(x){
as.numeric(x[1])^as.numeric(x[2])
})
#[1] 1e+02 1e+03 1e+06 NA 1e+09
试图将此向量强制转换为数字:
vec <- c("10^2", "10^3", "10^6", "", "10^9")
vec <- as.numeric(vec)
[1] NA NA NA NA NA
Warning message:
NAs introduced by coercion
所需输出:
[1] “100” “1000” “1e+06” “” “1e+09”
这里,我们可以使用eval(parse
,因为它是一个表达式
lst1 <- lapply(vec, function(x) eval(parse(text = x)))
lst[sapply(lst1, is.null)] <- NA
unlist(lst1)
#[1] 1e+02 1e+03 1e+06 NA 1e+09
或者以紧凑的方式,replace
空格 (""
) 与 NA
然后执行 eval(parse
sapply(replace(vec, vec == "", NA), function(x) eval(parse(text = x)))
或者另一种选择是 read
和 read.table
使用 sep
作为 ^
然后使用
with(read.table(text = paste(vec, collapse="\n"), sep="^", header = FALSE), V1^V2)
或按照@d.b的建议
read.table(text = paste(gsub("0\^", "e", replace(vec, vec == "", NA)),
collapse="\n"), header = FALSE)
在 ^
处拆分字符串,然后分别强制转换每个部分。我们必须使用 \
进行转义,因为 ^
是一个特殊的正则表达式字符。
sapply(strsplit(vec, "\^"), function(x){
as.numeric(x[1])^as.numeric(x[2])
})
#[1] 1e+02 1e+03 1e+06 NA 1e+09