r - 如何将此 'for' 循环转换为向量解

标签 r

此问题涉及:Convert long state names embedded with other text to two-letter state abbreviations

下面的 for 循环代码效果很好。

for(r in 1:nrow(states.list)) {
    states = sub(states.list[r,1], states.list[r,2], states)
}

states
[1] "Plano NJ"      "NC"            "xyz"           "AL 02138"      "TX"            "Town IA 99999"

数据:

states <- c("Plano New Jersey", "NC", "xyz", "Alabama 02138", "Texas", "Town Iowa 99999")

states.list = structure(list(state.name = structure(c(4L, 1L, 5L, 2L, 3L), .Label = c("Alabama", 
"Iowa", "Minnesota", "New Jersey", "Texas"), class = "factor"), 
    state.abb = structure(c(4L, 1L, 5L, 2L, 3L), .Label = c("AL", 
    "IA", "MN", "NJ", "TX"), class = "factor")), .Names = c("state.name", 
"state.abb"), class = "data.frame", row.names = c(NA, -5L))

states.list
  state.name state.abb
1 New Jersey        NJ
2    Alabama        AL
3      Texas        TX
4       Iowa        IA
5  Minnesota        MN

我尝试按照以下方式获得矢量解决方案,但它们不起作用:

apply(states.list, 1, function(x) {
    sapply(states, function(y) {
        sub(   x[1], x[2],   y
        )
        })
})

sapply(states, function(x) sub(states.list[,1], states.list[,2], x))

apply(states.list, 1, function(x) sub(x[1],x[2], states))

如何将其转换为矢量解决方案(使用 apply 等,而不使用任何特殊包)?感谢您的帮助。

编辑: akrun 解决方案的输出:

sapply ( seq_len(nrow(states.list)), function(i) {
+ sub(states.list[i,1], states.list[i,2], states[i])
+ })
[1] "Plano NJ"      "NC"            "xyz"           "Alabama 02138" "Texas"        

最佳答案

我怀疑这可以矢量化。最好的情况是,您可以将 for 循环隐藏在 *apply 等效项下,或者使用 Reduce ,如下所示:

ARGS <- split(states.list, seq_len(nrow(states.list)))
FUN  <- function(x, y) gsub(as.character(y$state.name),
                            as.character(y$state.abb), x)
Reduce(FUN, ARGS, states)

它很奇特,但恕我直言,它不值得付出努力:它可能不比 for 循环快,而且更难理解,不是吗?在 R 中使用 for 有一点太多的耻辱。

关于r - 如何将此 'for' 循环转换为向量解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25584046/

相关文章:

r - 在 R 中使用 "and ' 正确引用 SQL 查询

r - 将R中的文件扩展名添加到多个文件

r - 如何在 r 中的 h2o.automl 排行榜中打印所有模型的可变重要性

r - map 不会在带有传单和光栅的 Shiny 应用程序中呈现

r - 删除重复的行,选择要保留的特定值

R ggplot : facet_grid with different geom_rects for each facet trouble

r - 如何在R中创建列的md5哈希?

oop - 如何找出为 R 中的类定义的所有方法?

r - 如何在R中绘制美国多个州的轮廓?

r - R 是否支持多级命名空间?