我有一个简单的网络刮刀似乎表现得很奇怪:
- 在桌面版本的RStudio(在Windows上运行R版本3.3.3),它的行为符合预期,并产生数字向量
- 在服务器版本的RStudio(在Linux上运行R版本3.4.1)gsub()
(以及之后的数字转换)失败,代码生成NA
s的向量。
你知道可能导致差异的原因吗?
library(rvest)
url <- "http://benzin.impuls.cz/benzin.aspx?strana=3"
impuls <- read_html(url, encoding = "windows-1250")
asdf <- impuls %>%
html_table()
Benzin <- asdf[[1]]$X7
chrBenzin <- gsub("\\sKč","",Benzin) # something is wrong here...
numBenzin <- as.double(chrBenzin)
numBenzin
答案 0 :(得分:3)
值中的空格是一个硬空间 .customDropdown .dropdown-menu>li>a {
display: block;
padding: 1px 5px;
clear: both;
font-weight: 400;
line-height: 1.42857143;
color: #333;
white-space: nowrap;
}
。运行代码后,我得到U+00A0
的输出(在ideone.com上复制/粘贴):
然后,我已经确定那些是硬空间,但我加倍检查here。
当我们有足够的空间时,我们该怎么办才能尝试两种选择。
一个是在TRE中使用Benzin
(Base R函数中的默认正则表达式引擎)。
另一种是在开始时使用带有[[:space:]]
动词的PCRE正则表达式让正则表达式引擎知道我们处理Unicode。
在你的情况下,在Linux上,似乎PCRE正常工作,因此你应该坚持使用PCRE版本(这比TRE更加一致):
(*UCP)
Linux R上的快速在线测试:
gsub("(*UCP)\\s+Kč","",Benzin, perl=TRUE)