【问题标题】:Loop names from two dataframe columns through an existing function in R通过 R 中的现有函数循环来自两个数据框列的名称
【发布时间】:2020-12-08 19:16:24
【问题描述】:

我有一个数据框中的植物名称列表。植物名称以“属”后跟“种”的对联形式出现。在我的情况下,对联已经跨列拆分(这应该会有所帮助)。作为三个物种(向日葵、辐射松和白千层)的虚拟示例:

df <- data.frame(genus=c("Helianthus", "Pinus", "Melaleuca"), species=c("annuus","radiata", "leucadendra"))

我想使用包“Taxize”中的一个函数来对照数据库 (IPNI) 检查这些名称。 没有批处理功能,烦人的查询单个名称的格式是:

checked <- ipni_search(genus='Helianthus', species='annuus')

我需要一个循环来将每个属名及其相关的物种名输入到该函数中。 我可以这样做:

list <- df$genus
checked <- lapply(list, function(z) ipni_search(genus=z))

但我被各种试图通过它传递物种的结束缚。

任何帮助表示赞赏! 干杯

【问题讨论】:

    标签: r loops


    【解决方案1】:

    在索引上循环(或*apply),而不是实际值:

    checked = lapply(
      1:nrow(df),
      function(i) ipni_search(genus = df$genus[i], species = df$species[i])
    )
    

    或者,您可以使用Map,它用于并行迭代多个向量/列表:

    checked = Map(ipni_search, genus = df$genus, species = df$species)
    

    【讨论】:

    • 太棒了!喜欢地图解决方案,不知道,非常感谢!
    • Map 是一个鲜为人知的基本 R 函数。虽然如果你使用 purrr 有许多有用的特定变体。
    猜你喜欢
    • 2015-11-05
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    相关资源
    最近更新 更多