Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-根据'purrr';_R_Data Manipulation_Purrr - Fatal编程技术网

R-根据'purrr';

R-根据'purrr';,r,data-manipulation,purrr,R,Data Manipulation,Purrr,我有下面的HTML输入列表。该列表具有嵌套结构- 级别1包含输入的名称(例如,input1) 级别2包含有关每个输入的一些信息-名称,属性,子项 级别3分支出子级,这是一个长度为2的列表-第一个元素包含有关输入标签的信息,第二个元素包含有关输入类型的信息。因为我需要输入标签,所以我需要为每个输入提取这个列表的第一个元素 名单如下: library(purrr) inputs = list( input1 = list( name = 'div', attribs = li

我有下面的HTML输入列表。该列表具有嵌套结构-

  • 级别1包含输入的名称(例如,
    input1
  • 级别2包含有关每个输入的一些信息-
    名称
    属性
    子项
  • 级别3分支出
    子级
    ,这是一个长度为2的列表-第一个元素包含有关输入标签的信息,第二个元素包含有关输入类型的信息。因为我需要输入标签,所以我需要为每个输入提取这个列表的第一个元素 名单如下:

    library(purrr)
    
    inputs = list(
      input1 = list(
        name = 'div', 
        attribs = list(class = 'form-group'), 
        children = list(list(name = 'label', 
                             attribs = list(`for` = 'email'), 
                             children = list('Email')), 
                        list(
                          list(name = 'input', 
                               attribs = list(id = 'email', type = 'text'), 
                               children = list()))
                        )))
    
    str(inputs)
    List of 1
     $ input1:List of 3
      ..$ name    : chr "div"
      ..$ attribs :List of 1
      .. ..$ class: chr "form-group"
      ..$ children:List of 2
      .. ..$ :List of 3
      .. .. ..$ name    : chr "label"
      .. .. ..$ attribs :List of 1
      .. .. .. ..$ for: chr "email"
      .. .. ..$ children:List of 1
      .. .. .. ..$ : chr "Email"
      .. ..$ :List of 1
      .. .. ..$ :List of 3
      .. .. .. ..$ name    : chr "input"
      .. .. .. ..$ attribs :List of 2
      .. .. .. .. ..$ id  : chr "email"
      .. .. .. .. ..$ type: chr "text"
      .. .. .. ..$ children: list()
    
    我可以使用
    keep()
    has\u元素来执行此操作:

    label = input %>% 
      map_depth(2, ~keep(., ~has_element(., 'label'))) %>%
      map('children') %>%
      flatten %>% 
      map('children') %>%
      flatten
    
    输出:

    str(label)
    List of 1
     $ input1: chr "Email"
    

    当我浏览
    purr
    帮助页面时,
    keep
    似乎是我想要的功能,但我仍然必须使用
    map
    flant
    两次才能找到标签,这看起来很笨拙。所以我想知道是否有更直接的方法来实现相同的输出?与其说我对解决方案感兴趣,不如说我对处理类似嵌套列表的思考过程感兴趣。

    如果每个输入都具有相同的结构,那么您就不需要保留
    ,它用于删除不满足某些条件的列表元素。相反,您可以像这样使用
    pulk
    进行映射。当然,此方法会删除与每个输入相关的所有其他数据。如果最终目标是“矩形”,即在平面结构中获取每个输入的所有信息,则可能需要做一些不同的事情

    库(purrr)
    输入=列表(
    输入1=列表(
    名称='div',
    attribs=list(class='formgroup'),
    儿童=列表(
    名单(
    名称='标签',
    attribs=list(`for`='email'),
    子项=列表('电子邮件')
    ), 
    名单(
    名单(
    名称='输入',
    attribs=list(id='email',type='text'),
    children=list()
    )
    )
    )
    )
    )
    输入%>%
    地图(~pluck(,“children”,1,“name”))
    #>$input1
    #>[1]“标签”
    

    由(v0.3.0)于2019-06-14创建。如果每个输入都具有相同的结构,则不需要保留(用于删除不符合某些条件的列表元素)。相反,您可以像这样使用
    pulk
    进行映射。当然,此方法会删除与每个输入相关的所有其他数据。如果最终目标是“矩形”,即在平面结构中获取每个输入的所有信息,则可能需要做一些不同的事情

    库(purrr)
    输入=列表(
    输入1=列表(
    名称='div',
    attribs=list(class='formgroup'),
    儿童=列表(
    名单(
    名称='标签',
    attribs=list(`for`='email'),
    子项=列表('电子邮件')
    ), 
    名单(
    名单(
    名称='输入',
    attribs=list(id='email',type='text'),
    children=list()
    )
    )
    )
    )
    )
    输入%>%
    地图(~pluck(,“children”,1,“name”))
    #>$input1
    #>[1]“标签”
    
    由(v0.3.0)于2019年6月14日创建

    map(inputs, "children") %>% map_depth(2, "children")
    
    输出:

    $input1
    $input1[[1]]
    $input1[[1]][[1]]
    [1] "Email"
    
    
    $input1[[2]]
    NULL
    
    尝试:

    输出:

    $input1
    $input1[[1]]
    $input1[[1]][[1]]
    [1] "Email"
    
    
    $input1[[2]]
    NULL
    

    我注意到你的第二份“清单”是额外的金额,这是故意的吗?现在它是:{{n,a,c={{{n,a,c},{{n,a,c}}。你是说{{n,a,c={{n,a,c},{n,a,c}}}}吗?@Marian我不确定我是否理解注释中的符号,但实际列表包含n个输入,即
    input1,input2,…,inputN
    ,每个输入都有一个子列表,其结构与我所问的相同。对不起,我在我的帖子里没有说得更清楚。我注意到你的第二张“名单”是额外的金额,这是故意的吗?现在它是:{{n,a,c={{{n,a,c},{{n,a,c}}。你是说{{n,a,c={{n,a,c},{n,a,c}}}}吗?@Marian我不确定我是否理解注释中的符号,但实际列表包含n个输入,即
    input1,input2,…,inputN
    ,每个输入都有一个子列表,其结构与我所问的相同。很抱歉,我在帖子中没有说得更清楚。谢谢@Calum,这比我所做的要简单得多!我试过拔毛,但正在通过向量的索引。最后我用了
    弹拨(,“children”,1,“children”,1)
    ,因为这给了我标签的价值。谢谢@Calum,这比我刚才做的简单多了!我试过拔毛,但正在通过向量的索引。我最终使用了
    pulk(,“children”,1,“children”,1)
    ,因为这给了我标签的值。谢谢@Marian,我最终使用了
    pulk()
    ,但是如果我将结果展平两次,你的解决方案会给我相同的答案。谢谢@Marian,我最终使用了
    pulk())
    但如果我将结果展平两次,您的解决方案将给出相同的答案。