几个月后我没有练习就回到了R,我对那里发生的事情有点傻眼
for (year in c('09', '08', '10', '11',
'12', '13', '14', '15')){
col <- paste("price_", year, sep="")
print(col)
mpt <- gregexpr("P\\.T.*(\\d|,|\\.)+", data[col], perl=TRUE)
print('done')
pt_matches = regmatches(data[col], mpt)
print("matches")}
看起来相当容易,我希望有这个输出:
"price_09"
"done"
"matches"
"price_08"
... # and so on
然而,R似乎没有执行一个完整的循环,我只得到:
"price_09"
"done"
没有别的。我没有收到错误消息,就像分配mpt
充当'休息'一样。我会错过一些明显的东西吗?
如果我删除mpt
作业,我会打印出“匹配”字样,但它显然会在路上崩溃
答案 0 :(得分:2)
根据?gregexpr
,text
参数
gregexpr(pattern, text, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)
需要vector
text - 寻找匹配的字符向量,或者是对象 可以通过as.character强制转换为字符向量。长矢量是 支撑。
此处,data[col]
仍为data.frame
。要将其转换为vector
,请使用[[
使用可重现的例子,
d1 <- data.frame(v1 = c('pine', 'tree', 'chill'))
regmatches(d1['v1'], gregexpr('pi', d1['v1']))
#$v1
#character(0)
regmatches(d1[['v1']], gregexpr('pi', d1[['v1']]))
#[[1]]
#[1] "pi"
#[[2]]
#character(0)
#[[3]]
#character(0)