使用矩阵与字符向量从vapply返回

时间:2016-06-28 16:17:03

标签: r lapply

我有一个vapply函数,可以使用Google地图中的数据构建返回矩阵。当函数使用只有一个地址的地理编码返回时,vapply将矩阵强制转换为长度为4的简单字符向量。当处理多个地址时,返回矩阵,其中nrows对应于编码的地址数。一个简单的例子如下。我在下面有一个解决方案,但它让我觉得它是实现所需输出的不优雅途径,即具有命名列的数据框。我也想知道这是否可以通过这种方法让我接触到错误。是否有更好的方法可以灵活地创建具有这些不断变化的字符输入的数据框?

# Save a dummy URL
geocode_url <- "https://www.google.com"

# Example: one row character return from vapply where matrix is coerced to character vector.
coord <- c(NA, NA, NA, "ZERO_RESULTS")

# Example: matrix return from vapply
coord <- matrix(c(NA, NA, NA, "ZERO_RESULTS",
                       NA, NA, NA, "ZERO_RESULTS", 
                       NA, NA, NA, "ZERO_RESULTS"),
                       ncol=4, nrow=3, byrow=T)

if(is.matrix(coord)){
    out <- data.frame(input_url=geocode_url,
                      lat=as.numeric(coord[ , 1]),
                      lng=as.numeric(coord[ , 2]),
                      location_type=coord[ , 3],
                      status=coord[ , 4])
} else if(length(coord)==4){
    out <- data.frame(input_url=geocode_url,
                      lat=as.numeric(coord[1]),
                      lng=as.numeric(coord[2]),
                      location_type=coord[3],
                      status=coord[4])
}

1 个答案:

答案 0 :(得分:0)

这是你在找什么?

if(is.matrix(coord)){
    out <- as.data.frame(coord)   
} else if(length(coord)==4) {
    out <- data.frame(t(unlist(coord)))
}

colnames(out) <- c("lat", "lang", "location_type", "status")
out$input_url <- geocode_url
out <- out[,c(5,1:4)]
out[,c(2,3)] <- lapply(out[,c(2,3)], as.numeric)