当我遇到一个有趣的事情时,我正在摆弄文字清理。
可重复代码:
trimws(list(c("this is an outrante", " hahaha", " ")))
输出:
[1] "c(\"this is an outrante\", \" hahaha\", \" \")"
我已经检查了 trimws 文档,除了它需要一个字符向量这个事实之外,它没有进入任何细节,在我的例子中,我是'提供了一系列字符向量列表。我知道我可以使用 lapply 来轻松解决这个问题,但我想了解的是我的修剪器是怎么回事?
答案 0 :(得分:3)
trimws
将直接应用于vector
,而不是list
。
根据?trimws
文档,用法是
trimws(x,其中= c("两者","左","右")
其中
x-一个字符向量
目前尚不清楚为什么vector
包含在list
trimws(c("this is an outrante", " hahaha", " "))
如果确实需要list
,请使用list
元素中的一个函数并应用trimws
lapply(list(c("this is an outrante", " hahaha", " ")), trimws)
另请注意,OP的list
长度为list
,可以vector
或{[[1]]
转换回unlist
{1}}(更一般)
trimws(list(c("this is an outrante", " hahaha", " "))[[1]])
关于函数为什么会这样做,它应该有一个输入参数作为vector
。对于期望vector
的其他函数,行为类似于例如
paste(list(c("this is an outrante", " hahaha", " ")))
as.character(list(c("this is an outrante", " hahaha", " ")))
如果我们检查trimws
功能,则会调用正则表达式sub
,这需要vector
mysub <- function(re, x) sub(re, "", x, perl = TRUE)
mysub("^[ \t\r\n]+", list(c("this is an outrante", " hahaha", " ")))
#[1] "c(\"this is an outrante\", \" hahaha\", \" \")"
传递vector
mysub("^[ \t\r\n]+", c("this is an outrante", " hahaha", " "))
#[1] "this is an outrante" "hahaha" ""