在 sapply 的函数中使用元素的名称
Use name of the element inside the function of sapply
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]
}
如果您想同时使用列表的名称和值,可以将名称作为参数传递并使用它们来访问值。举个例子:
score <- list(name1 = 1, name2 = 2)
sapply(names(score), function(name) score[[name]]*nchar(name))
如您所见,function(name) score[[name]]*nchar(name)
同时使用了 name
和值 score[[name]]
。
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]
}
如果您想同时使用列表的名称和值,可以将名称作为参数传递并使用它们来访问值。举个例子:
score <- list(name1 = 1, name2 = 2)
sapply(names(score), function(name) score[[name]]*nchar(name))
如您所见,function(name) score[[name]]*nchar(name)
同时使用了 name
和值 score[[name]]
。