【问题标题】:Use name of the element inside the function of sapply在 sapply 函数中使用元素的名称
【发布时间】:2017-05-18 08:58:01
【问题描述】:

sapply 可以使用原始列表的名称来命名输出的元素。但是我有点不清楚它是如何做到的:

> base::sapply
function (X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE) 
{
    FUN <- match.fun(FUN)
    answer <- lapply(X = X, FUN = FUN, ...)
    if (USE.NAMES && is.character(X) && is.null(names(answer))) 
        names(answer) <- X # Here it is
    if (!identical(simplify, FALSE) && length(answer)) 
        simplify2array(answer, higher = (simplify == "array"))
    else answer
}

但是,我还想使用要在传递给 sapply 的函数内部使用的列表的原始元素的名称。如何在函数中使用我正在迭代的列表元素的名称?

我唯一的解决方法是使用 for 循环:

for (x in seq_along(list)) {
  y <- FUN(list[[x]]) 
  method(y) <- names(list)[x]
}

【问题讨论】:

    标签: r sapply


    【解决方案1】:

    如果您想同时使用列表的名称和值,您可以将名称作为参数传递并使用它们来访问值。举个例子:

    score <- list(name1 = 1, name2 = 2)
    sapply(names(score), function(name) score[[name]]*nchar(name))
    

    如您所见,function(name) score[[name]]*nchar(name) 使用了name 和值score[[name]]

    【讨论】:

    • 我应该考虑到这一点
    猜你喜欢
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    相关资源
    最近更新 更多