R中的sapply函数没有给我想要的结果

时间:2015-02-23 03:10:06

标签: regex r sapply

我正在尝试使用sapply而不是'for'循环但是我没有得到我期望的结果,我已经测试了每一行分开并且代码正常工作但是当我使用时sapply不是。我正在寻找一些可能出错的提示:

event <- c('Astronomical Low Tide', 'Avalanche', 'Blizzard', 'Coastal Flood', 
           'Cold/Wind Chill', 'Debris Flow', 'Dense Fog', 'Dense Smoke', 'Drought',
           'Dust Devil', 'Dust Storm','Excessive Heat', 'Extreme Cold/Wind Chill',
           'Flash Flood', 'Flood', 'Frost/Freeze', 'Funnel Cloud', 'Freezing Fog',
           'Hail', 'Heat', 'Heavy Rain', 'Heavy Snow', 'High Surf', 'High Wind',
           'Hurricane/Typhoon', 'Ice Storm', 'Lake/Effect Snow', 'Lakeshore Flood',
           'Lightning', 'Marine Hail', 'Marine High Wind', 'Marine Strong Wind',
           'Marine Thunderstorm Wind', 'Rip Current', 'Seiche', 'Sleet',
           'Storm Surge/Tide', 'Strong Wind', 'Thunderstorm Wind', 'Tornado',
           'Tropical Depression', 'Tropical Storm', 'Tsunami', 'Volcanic Ash',
           'Waterspout', 'Wildfire', 'Winter Storm', 'Winter Weather')

replace <- function(dt, x, col) {
  idx <- grep(paste('(?i)', event[x], sep = ''), dt[, col])
  dt[idx, col] <- event[x]
}

sapply(1:length(event), function(x) replace(stormdata, x, 8))

基本上,我要做的是将event变量上的每个值用作自定义grep函数中replace函数的模式然后我得到与我的模式匹配的行的索引,并将它们存储在idx变量中。之后,我想用idx变量中包含的值替换数据框中与event值对应的行。

我正在尝试使用sapply函数创建一个循环来使用event变量上的每个值,所以我想要一个循环,它会查找数据框中的每个模式48次{在其第8列上{1}}并替换它们。但是我的代码什么也没做,运行后数据保持不变,没有替换。当我单独运行每一行而没有stormdata时,它可以工作。

我到处寻找,我找不到为什么不工作。救命。

1 个答案:

答案 0 :(得分:0)

尝试在您的函数中使用全局赋值,例如stormdata[idx, col] <<- event[x]。不干净,但可能会奏效。