将列表元素名称作为变量传递给 lapply 中的函数
Passing list element names as a variable to functions within lapply
我有一个命名的数据列表和一个要应用于数据的自定义函数:
#Some example data
d.list <- list(a = c(1,2,3), b = c(4,5,6), c = c(7,8,9))
#A simple function to process some data, write an output graph, and return an output
myfun <- function(data, f.name) {
y <- list()
y[1] <- data[1] + data[2] + data[3]
y[2] <- data[3] - data[1]/ data[2]
y[3] <- data[2] * data[3] - data[1]
svg(filename = f.name, width = 7, height = 5, pointsize = 12)
plot.new()
plot(data, y)
dev.off()
return(y)
}
我现在想使用 sapply
对我的列表进行迭代,并为每次迭代获取一个保存的图像文件,文件名设置为列表元素名称(例如 a.svg、b.svg, c.svg 在上面的例子中),以及包含计算结果的数据框。当我 运行 这个:
#Iterate over the example data using sapply
res <- t(sapply(d.list, function(x) myfun(data=x,
f.name=paste(names(d.list), ".svg", sep = ""))))
我得到了预期的数据框:
[,1] [,2] [,3]
a 6 2.500 5
b 15 5.200 26
c 24 8.125 65
但我在目标目录中只得到一个文件:"a.svg"
如何将列表元素名称作为参数正确传递给我在 sapply
中调用的函数?
如果您需要同时迭代两个向量(数据和文件名),请使用 mapply
(或 Map
)
res <- t(mapply(myfun, d.list, paste0(names(d.list), ".svg")))
在 OP 的 post 中,它遍历 'd.list' 的每个元素,但在每个循环中调用名称(d.list),即调用向量(c("a", "b", "c")
).我们需要循环 'd.list' 的 names
。这样,我们可以通过子集化获得单个 names
以及 list
元素。
lapply(names(d.list), function(x) paste0(x, ".svg"))
如果我们使用OP的功能
lapply(names(d.list), function(x) myfun(data= d.list[[x]],
f.name = paste0(x, ".svg")))
我有一个命名的数据列表和一个要应用于数据的自定义函数:
#Some example data
d.list <- list(a = c(1,2,3), b = c(4,5,6), c = c(7,8,9))
#A simple function to process some data, write an output graph, and return an output
myfun <- function(data, f.name) {
y <- list()
y[1] <- data[1] + data[2] + data[3]
y[2] <- data[3] - data[1]/ data[2]
y[3] <- data[2] * data[3] - data[1]
svg(filename = f.name, width = 7, height = 5, pointsize = 12)
plot.new()
plot(data, y)
dev.off()
return(y)
}
我现在想使用 sapply
对我的列表进行迭代,并为每次迭代获取一个保存的图像文件,文件名设置为列表元素名称(例如 a.svg、b.svg, c.svg 在上面的例子中),以及包含计算结果的数据框。当我 运行 这个:
#Iterate over the example data using sapply
res <- t(sapply(d.list, function(x) myfun(data=x,
f.name=paste(names(d.list), ".svg", sep = ""))))
我得到了预期的数据框:
[,1] [,2] [,3]
a 6 2.500 5
b 15 5.200 26
c 24 8.125 65
但我在目标目录中只得到一个文件:"a.svg"
如何将列表元素名称作为参数正确传递给我在 sapply
中调用的函数?
如果您需要同时迭代两个向量(数据和文件名),请使用 mapply
(或 Map
)
res <- t(mapply(myfun, d.list, paste0(names(d.list), ".svg")))
在 OP 的 post 中,它遍历 'd.list' 的每个元素,但在每个循环中调用名称(d.list),即调用向量(c("a", "b", "c")
).我们需要循环 'd.list' 的 names
。这样,我们可以通过子集化获得单个 names
以及 list
元素。
lapply(names(d.list), function(x) paste0(x, ".svg"))
如果我们使用OP的功能
lapply(names(d.list), function(x) myfun(data= d.list[[x]],
f.name = paste0(x, ".svg")))