函数单独工作正常,但使用apply函数返回错误:尝试在get1index

时间:2017-10-11 22:04:34

标签: r function error-handling lapply

我有一个如下所示的字符向量列表:

    [[1]]
    [1]   "medical"             "center"              "name
    [7] "laboratory"          "medicine"            "william"                 
    [13] "laboratories"        "2431"                "highway"             
    ...
    [680]

    ...

    [[100]]
    ..
    [590]

列表中的每个成员代表一名患者,每个成员的角色向量是他们的标记化医疗报告。我正在挖掘列表中每个成员的某些参数,并使用以下代码:

    f <- function(x, phrase, n_words = 3L, upto = NULL) {
    x <- paste0(x, collapse = ' ')
    word <- '\\b\\w+\\b\\s*'
    p <- if (!is.null(upto))
            sprintf('(?:%s)\\s*((%s)+)%s|.', phrase, word, upto)
    else sprintf('(?:%s)\\s*((%s){1,%s})|.', phrase, word, n_words)
    trimws(gsub(p, '\\1', x))
   }

在单字符矢量对象上使用时,此功能运行良好。例如:

    >f(P1, "histology results", upto = "diagnosed by"))
    [1] highly differentiated, stage 4 out of 4

其中P1是标记化单词的字符对象。

但是,使用列表并使用lapply函数,我收到错误。

   > lapply(list, f, list[[i]], "histology results", upto = "diagnosed by")
    Error in list[[i]] : 
         attempt to select less than one element in get1index

当我运行该函数选择列表中的各个成员时,它适用于每个成员,没有抛出任何错误。就像一个例子:

   > f(list[[2]], "histology results", upto = "diagnosed by")
   [1] "mildly differentiated stage 1 of 4"

我做错了什么?

1 个答案:

答案 0 :(得分:0)

注意i代替个案中列表的索引,例如, i=2f(list[[2]], "histology results", upto = "diagnosed by")

lapply函数中,您实际上调用的内容类似于list[[list]]而不是list[[1]], list[[2]], ..., list[[length(list)]]。因此,您希望lapply迭代的对象是索引列表1:length(list)。尝试:

lapply(1:length(list), function(i) f(list[[i]], "histology results", upto = "diagnosed by"))

或者将list对象提供给lapply并直接在其上调用f函数,而不需要子集。尝试:

lapply(list, function(i) f(i, "histology results", upto = "diagnosed by"))