我正在尝试找到一个格式函数来抑制R中的NaN
输出。我想传递一个double的向量,并使NaN
值返回为空而不是{{ 1}}。我正在尝试为Latex表格式输出。这应该很简单吧?有这样的功能吗?
这是我现在得到的:
NaN
这就是我想要的:
> x <- c(seq(1,2,0.2), NaN)
> as.character(x)
> [1] "1" "1.2" "1.4" "1.6" "1.8" "2" "NaN"
答案 0 :(得分:3)
你走了:
R> x <- c(seq(1,2,0.2), NaN)
R> zx <- as.character(x)
R> zx
[1] "1" "1.2" "1.4" "1.6" "1.8" "2" "NaN"
现在我们定义一个新函数mattFun()
:
R> mattFun <- function(x) gsub("NaN", "", as.character(x))
并使用它:
R> zy <- mattFun(x)
R> zy
[1] "1" "1.2" "1.4" "1.6" "1.8" "2" ""
R>
严肃地说,你只是在寻找简单的模式替代品
正则表达式。 gsub()
是提供此功能的几个功能之一。试着阅读正则表达式。
答案 1 :(得分:0)
只需更换&#34; NaN&#34;通过&#34;&#34;:
x <- c(seq(1,2,0.2), NaN)
fofu <- function(x){
cx <- as.character(x)
cx[cx=="NaN"] <- ""
cx
}
fofu(x)
#[1] "1" "1.2" "1.4" "1.6" "1.8" "2" ""
或使用隐式转换缩短时间:
fofu2 <- function(x) "[<-"(x, is.nan(x), "")
# or ... replace(x, is.nan(x), "")
这比基于gsub的解决方案快两倍(使用上面定义的microbenchmark
和x
) - 当然,大多数情况下重要的是方便而不是计算时间。