R lappy返回空数据帧

R lappy返回空数据帧,r,list,dataframe,lapply,R,List,Dataframe,Lapply,我试图将数据从列表移动到数据框中。当我运行数据路径时,例如: RequestData[[“行”][[“元素”][[1][[“距离”][[“文本”]]] 我得到的结果是: [1]“8.4公里” 但当我在函数中使用相同的路径时: disData <- lapply(seq_along(RequestData), function(x){ Dis_km <- RequestData[["rows"]][["elements"]][[x]

我试图将数据从列表移动到数据框中。当我运行数据路径时,例如:

RequestData[[“行”][[“元素”][[1][[“距离”][[“文本”]]]

我得到的结果是:

[1]“8.4公里”

但当我在函数中使用相同的路径时:

disData <- lapply(seq_along(RequestData), function(x){         
                  Dis_km <- RequestData[["rows"]][["elements"]][[x]][["distance"]][["text"]]
                  Duration <- RequestData[["rows"]][["elements"]][[x]][["duration"]][["text"]]
                  ID <- all_articles[x,"id"]

                  if (is.data.frame(Dis_km) && nrow(Dis_km)>0){

                    res_df <- data.frame(
                                         distanca=Dis_km,
                                         Duration=Duration,
                                         Id = ID
                                                )
                      }
              }) 
列表结构与第一个元素类似:

有什么问题吗?
谢谢大家!

因此,有一种比使用apply-family更好的方法来解决您的问题,您可以完全控制数据帧,并且可以轻松地对其进行操作,主要使用dplyr和purrr包,如下所示:

元素创建
#创建原始列表
目的地地址=c(“波斯尼亚-黑塞哥维那萨拉热窝71000号马尔萨拉蒂塔62”)
原产地地址=c(“Mustafe Latifića,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“波罗迪斯·里巴尔,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“斯肯德里贾和阿迪拉·格雷贝,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“AzizeŠaćirbegović,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“波桑斯卡,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“杰泽罗,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“Behdžeta Mutevelića,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“埃米拉,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“Braće Begić,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“波罗迪斯·里巴尔,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“Nedima Filipovića,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“特拉利,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“奥赫里斯卡、萨拉热窝、波斯尼亚和黑塞哥维那”,
“MuseĆazimaĆatića,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“德马拉·比杰迪奇,萨拉热窝,波斯尼亚和黑塞哥维那”,
“费尔德·霍普特马纳,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“巴卡雷维奇·伊娃和比斯特里克,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“萨拉热窝Vratnik Mejdan 71000,波斯尼亚和黑塞哥维那”,
“米斯埃尔比纳,萨拉热窝71000,波斯尼亚和黑塞哥维那”,
“科切沃,萨拉热窝71000,波斯尼亚和黑塞哥维那”)
状态=c(“正常”)
#请注意,这只是行的示例

数据帧中的行您希望目标_地址和状态以所有行的给定值重复,还是仅第一行的值重复,其余行的值为空?不是。我只想从path$rows$elements$distance和path$rows$elements$duration中获取值,然后将它们与另一个dataframe(所有文章)的id合并。您还可以共享列表元素的结构吗显然元素行中有一个dataframe,但是不清楚它包含哪些列名。也有参考所有的文章,不清楚它指的是什么。我添加了必要的信息。请检查Anks Naramen给出的答案。我举第一个例子。
RequestData
$destination_addresses
[1] "Maršala Tita 62, Sarajevo 71000, Bosnia and Herzegovina"

$origin_addresses
 [1] "Mustafe Latifića, Sarajevo 71000, Bosnia and Herzegovina"         "Porodice Ribar, Sarajevo 71000, Bosnia and Herzegovina"          
 [3] "Skenderija & Adila Grebe, Sarajevo 71000, Bosnia and Herzegovina" "Azize Šaćirbegović, Sarajevo 71000, Bosnia and Herzegovina"      
 [5] "Bosanska, Sarajevo 71000, Bosnia and Herzegovina"                 "Jezero, Sarajevo 71000, Bosnia and Herzegovina"                  
 [7] "Behdžeta Mutevelića, Sarajevo 71000, Bosnia and Herzegovina"      "Emila Zole, Sarajevo 71000, Bosnia and Herzegovina"              
 [9] "Braće Begić, Sarajevo 71000, Bosnia and Herzegovina"              "Porodice Ribar, Sarajevo 71000, Bosnia and Herzegovina"          
[11] "Nedima Filipovića, Sarajevo 71000, Bosnia and Herzegovina"        "Telali, Sarajevo 71000, Bosnia and Herzegovina"                  
[13] "Ohridska, Sarajevo, Bosnia and Herzegovina"                       "Muse Ćazima Ćatića, Sarajevo 71000, Bosnia and Herzegovina"      
[15] "Džemala Bijedića, Sarajevo, Bosnia and Herzegovina"               "Ferde Hauptmana, Sarajevo 71000, Bosnia and Herzegovina"         
[17] "Bakarevićeva & Bistrik, Sarajevo 71000, Bosnia and Herzegovina"   "Vratnik Mejdan, Sarajevo 71000, Bosnia and Herzegovina"          
[19] "Mis Irbina, Sarajevo 71000, Bosnia and Herzegovina"               "Koševo, Sarajevo 71000, Bosnia and Herzegovina"                  

$rows
                                 elements
1  8.4 km, 8432, 1 hour 47 mins, 6413, OK
2         3.5 km, 3538, 46 mins, 2779, OK
3            0.7 km, 692, 9 mins, 552, OK
4         3.9 km, 3863, 50 mins, 3023, OK
5  6.3 km, 6275, 1 hour 19 mins, 4761, OK
6           0.8 km, 838, 11 mins, 655, OK
7         3.2 km, 3196, 41 mins, 2460, OK
8  7.9 km, 7898, 1 hour 43 mins, 6163, OK
9         2.4 km, 2413, 31 mins, 1842, OK
10        3.5 km, 3538, 46 mins, 2779, OK
11        4.0 km, 4041, 53 mins, 3165, OK
12          0.9 km, 937, 12 mins, 713, OK
13        2.8 km, 2837, 41 mins, 2432, OK
14           0.6 km, 611, 7 mins, 438, OK
15        4.5 km, 4507, 59 mins, 3550, OK
16        4.0 km, 4034, 53 mins, 3162, OK
17         1.0 km, 1039, 14 mins, 814, OK
18        1.6 km, 1564, 20 mins, 1215, OK
19           0.6 km, 595, 8 mins, 470, OK
20        1.9 km, 1883, 24 mins, 1425, OK

$status
[1] "OK"

# Creating original list
destination_addresses = c("Maršala Tita 62, Sarajevo 71000, Bosnia and Herzegovina")

origin_addresses = c("Mustafe Latifića, Sarajevo 71000, Bosnia and Herzegovina",
                     "Porodice Ribar, Sarajevo 71000, Bosnia and Herzegovina",
                     "Skenderija & Adila Grebe, Sarajevo 71000, Bosnia and Herzegovina",
                     "Azize Šaćirbegović, Sarajevo 71000, Bosnia and Herzegovina",   
                     "Bosanska, Sarajevo 71000, Bosnia and Herzegovina",
                     "Jezero, Sarajevo 71000, Bosnia and Herzegovina",
                     "Behdžeta Mutevelića, Sarajevo 71000, Bosnia and Herzegovina",
                     "Emila Zole, Sarajevo 71000, Bosnia and Herzegovina",
                     "Braće Begić, Sarajevo 71000, Bosnia and Herzegovina",
                     "Porodice Ribar, Sarajevo 71000, Bosnia and Herzegovina",
                     "Nedima Filipovića, Sarajevo 71000, Bosnia and Herzegovina",
                     "Telali, Sarajevo 71000, Bosnia and Herzegovina",
                     "Ohridska, Sarajevo, Bosnia and Herzegovina",
                     "Muse Ćazima Ćatića, Sarajevo 71000, Bosnia and Herzegovina",
                     "Džemala Bijedića, Sarajevo, Bosnia and Herzegovina",
                     "Ferde Hauptmana, Sarajevo 71000, Bosnia and Herzegovina",
                     "Bakarevićeva & Bistrik, Sarajevo 71000, Bosnia and Herzegovina",
                     "Vratnik Mejdan, Sarajevo 71000, Bosnia and Herzegovina",
                     "Mis Irbina, Sarajevo 71000, Bosnia and Herzegovina",
                     "Koševo, Sarajevo 71000, Bosnia and Herzegovina")

status = c("OK")

# Please note this is a sample of rows only
rows <- list(elements = list(
  list(distance = data.frame(text = c("8.4 km"), value = 8432, stringsAsFactors = FALSE),
       duration = data.frame(text = c("1 hour 47 mins"), value = 6413, 
                             stringsAsFactors = FALSE)),
  list(distance = data.frame(text = c("3.5 km"), value = 8432, stringsAsFactors = FALSE),
       duration = data.frame(text = c("46 mins"), value = 6413, stringsAsFactors = FALSE))))

# Creating final list
RequestData <- list(
  destination_addresses = destination_addresses,
  origin_addresses = origin_addresses,
  rows = rows,
  status = status
)

# All articles dataframe
all_articles <-
  data.frame(
    id = c("ID1", "ID2", "ID3", "ID4", "ID5", "ID6")
  )
library(purrr)
library(dplyr)

disData <-
  1:length(RequestData$rows$elements) %>% # We loop on elements
  map_df(function(x){
    tibble( # Access required elements from list
      distance = RequestData$rows$elements[[x]][["distance"]][["text"]],
      duration = RequestData$rows$elements[[x]][["duration"]][["text"]],
      Id = all_articles[x, "id"])
  })

disData
# # A tibble: 2 x 3
# distance duration       Id   
# <chr>    <chr>          <fct>
# 8.4 km   1 hour 47 mins ID1  
# 3.5 km   46 mins        ID2  
disData <- lapply(seq_along(RequestData$rows$elements), function(x){  
  Dis_km <- RequestData[["rows"]][["elements"]][[x]][["distance"]][["text"]]
  Duration <- RequestData[["rows"]][["elements"]][[x]][["duration"]][["text"]]
  ID <- all_articles[x,"id"]

  if (length(Dis_km) > 0){
    res_df <- data.frame(
      distanca = Dis_km,
      Duration = Duration,
      Id = ID
    )
  }
})

disData <- do.call("rbind", disData)
disData
# distanca       Duration  Id
# 8.4 km 1 hour 47 mins ID1
# 3.5 km        46 mins ID2