我创建了一个包含子列表的列表,每个子列表包含我要R执行的一项任务的信息。
df <- as.data.frame(matrix(1:6 , ncol =2 , nrow = 3))
colnames(df) <- c("Col1", "Col2")
myList <- list()
myList[["Dataset1"]] <- list()
myList[["Dataset1"]]["Function"] <- "mean"
myList[["Dataset1"]][["DataFrame"]] <- df
myList[["Dataset2"]] <- list()
myList[["Dataset2"]]["Function"] <- "lm"
myList[["Dataset2"]][["DataFrame"]] <- df*2
现在,我希望R将函数应用于数据框并将结果存储在新列表中。我如何做到最好?
到目前为止,我有两个想法:我要么使用lapply来遍历列表,每次都要从子列表中访问几个项目,并将其提供给新功能
myResult <- lapply(myList, FUN = myList[["Dataset1"]]["Function"](x) , x = as.matrix(myList[["Dataset1"]][["DataFrame"]]))
但是我不知道如何告诉R如何在子列表中正确循环。
其次,我希望能够将整个子列表发送给一个函数,但是我也无法运行它。
myFunction <- function(x){
TempData <- x[["DataFrame"]]
TempFunction <- x["Function"]
TempResult <- get(TempFunction)(TempData)
return(TempResult)
}
myResult <- lapply(myList, myFunction(x))
如果有人可以给我一个解决该ID的想法,那就非常高兴。
提前谢谢了!
听起来比应该的要复杂。而且还不清楚如何应用mean()或lm()。下面是将函数作为对象存储在列表中的示例:
myList[["Dataset1"]] <- list()
myList[["Dataset1"]][["Function"]] <- function(x)mean(as.matrix(x))
myList[["Dataset1"]][["DataFrame"]] <- df
myList[["Dataset2"]] <- list()
myList[["Dataset2"]][["Function"]] <- function(x){lm(Col2~Col1,data=x)}
myList[["Dataset2"]][["DataFrame"]] <- df*2
因此,您遍历列表中的元素,并获得每个元素的function(dataframe)结果:
lapply(myList,function(i)i$Function(i$DataFrame))
$Dataset1
[1] 3.5
$Dataset2
Call:
lm(formula = Col2 ~ Col1, data = x)
Coefficients:
(Intercept) Col1
6 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句