迭代 lapply 时打印列表名称
print list names when iterating lapply
我在名为 dat.list 的列表名称中有一个时间序列(x、y、z 和 a)。我想使用 lapply
将函数应用于此列表。有没有一种方法可以在 lapply 中完成每次迭代后打印元素名称 i.e., x,y,z 和 a。下面是可重现的CI示例。
## Create Dummy Data
x <- ts(rnorm(40,5), start = c(1961, 1), frequency = 12)
y <- ts(rnorm(50,20), start = c(1971, 1), frequency = 12)
z <- ts(rnorm(50,39), start = c(1981, 1), frequency = 12)
a <- ts(rnorm(50,59), start = c(1991, 1), frequency = 12)
dat.list <- list(x=x,y=y,z=z,a=a)
## forecast using lapply
abc <- function(x) {
r <- mean(x)
print(names(x))
return(r)
}
forl <- lapply(dat.list,abc)
基本上,我想在每次对这些元素执行函数时打印元素名称 x、y、z 和 a。当我运行上面的代码时,我打印了空值。
项目名称不会从 lapply
传递到第二个参数,只有值会传递。因此,如果您想查看名称,则调用策略需要有所不同:
> abc <- function(nm, x) {
+ r <- mean(x)
+ print(nm)
+ return(r)
+ }
>
> forl <- mapply(abc, names(dat.list), dat.list)
[1] "x"
[1] "y"
[1] "z"
[1] "a"
您可以进行一些深入挖掘(这是我从 SO 上的另一个答案中得到的——我将尝试找到 link)并执行如下操作:
abc <- function(x) {
r <- mean(x)
print(eval.parent(quote(names(X)))[substitute(x)[[3]]])
return(r)
}
forl <- lapply(dat.list, abc)
# [1] "x"
# [1] "y"
# [1] "z"
# [1] "a"
forl
# $x
# [1] 5.035647
#
# $y
# [1] 19.78315
#
# $z
# [1] 39.18325
#
# $a
# [1] 58.83891
我们可以 lapply
跨越 list
的名称(类似于 @BondedDust 所做的),就像这样(但您会在输出中丢失列表名称):
abc <- function(x, y) {
r <- mean(y[[x]])
print(x)
return(r)
}
lapply(names(dat.list), abc, y = dat.list)
我在名为 dat.list 的列表名称中有一个时间序列(x、y、z 和 a)。我想使用 lapply
将函数应用于此列表。有没有一种方法可以在 lapply 中完成每次迭代后打印元素名称 i.e., x,y,z 和 a。下面是可重现的CI示例。
## Create Dummy Data
x <- ts(rnorm(40,5), start = c(1961, 1), frequency = 12)
y <- ts(rnorm(50,20), start = c(1971, 1), frequency = 12)
z <- ts(rnorm(50,39), start = c(1981, 1), frequency = 12)
a <- ts(rnorm(50,59), start = c(1991, 1), frequency = 12)
dat.list <- list(x=x,y=y,z=z,a=a)
## forecast using lapply
abc <- function(x) {
r <- mean(x)
print(names(x))
return(r)
}
forl <- lapply(dat.list,abc)
基本上,我想在每次对这些元素执行函数时打印元素名称 x、y、z 和 a。当我运行上面的代码时,我打印了空值。
项目名称不会从 lapply
传递到第二个参数,只有值会传递。因此,如果您想查看名称,则调用策略需要有所不同:
> abc <- function(nm, x) {
+ r <- mean(x)
+ print(nm)
+ return(r)
+ }
>
> forl <- mapply(abc, names(dat.list), dat.list)
[1] "x"
[1] "y"
[1] "z"
[1] "a"
您可以进行一些深入挖掘(这是我从 SO 上的另一个答案中得到的——我将尝试找到 link)并执行如下操作:
abc <- function(x) {
r <- mean(x)
print(eval.parent(quote(names(X)))[substitute(x)[[3]]])
return(r)
}
forl <- lapply(dat.list, abc)
# [1] "x"
# [1] "y"
# [1] "z"
# [1] "a"
forl
# $x
# [1] 5.035647
#
# $y
# [1] 19.78315
#
# $z
# [1] 39.18325
#
# $a
# [1] 58.83891
我们可以 lapply
跨越 list
的名称(类似于 @BondedDust 所做的),就像这样(但您会在输出中丢失列表名称):
abc <- function(x, y) {
r <- mean(y[[x]])
print(x)
return(r)
}
lapply(names(dat.list), abc, y = dat.list)