如何在R中应用这个循环?

时间:2014-08-20 11:54:36

标签: r

我有一个名为try_out的数据框,其中包含raw_street,raw_number,raw_postalCode和raw_locality以及大约1000行

我写了一个函数google_clean,它将街道,数字,邮政编码和地点作为参数。

此循环可用于清除所有地址:

for(i in 1:length(try_out)){
  google_clean(try_out[i, "raw_street"],
             try_out[i, "raw_number"],
             try_out[i, "raw_postalCode"],
             try_out[i, "raw_locality"])
}

但有人可以建议我如何用R中的apply函数更好地写这个吗?

3 个答案:

答案 0 :(得分:1)

你可以重写google_clean函数,这样它就不需要取这4个参数,而是需要一个长度为4的向量。那么像这样的一行应该可以迭代try_out的行:< / p>

new_object = apply(try_out,1,google_clean)

您可能需要转置new_object,因为try_out中的行数将等于new_object中的列数。

答案 1 :(得分:1)

这应该有效:

mapply(google_clean, 
       try_out[,"raw_street"], 
       try_out[,"raw_number"], 
       try_out[,"raw_postalCode"], 
       try_out[,"raw_locality"])

答案 2 :(得分:1)

(你在问题中提到1:length(try_out),但也许你的意思是nrow(try_out)?)使用Map将函数应用于多个参数;使用with

保存一点打字
with(try_out, {
    Map(google_clean, raw_street, raw_number, raw_postalCode, raw_Locality)
})

它值得使用Map(和其他应用函数),因为它管理为您创建结果列表,并且因为它提供了矢量化的机会。特别是你的google_clean函数应该可以用于raw_street等的向量,而不是scalars,所以你要编写

with(try_out, google_clean(raw_street, raw_number, raw_postalCode, raw_Locality))