【发布时间】:2019-07-08 12:03:31
【问题描述】:
我有一组函数需要应用于多个数据帧。我想使用 lapply 函数而不是 for() 循环。
#sample data frame
id lastpage attribute_2
1 20 232
2 8 232
3 6 129
4 20 1271
5 20 129
6 20 74
当我一次将它应用到一个数据帧时,这些功能起作用。它基本上删除了变量“lastpage”值最低的重复项(基于attribute_2):
df <- df[order(df$attribute_2, -df$lastpage),]
df <- df[!duplicated(df$attribute_2),]
当我尝试 (l) 将此函数应用于多个数据帧时,调用数据帧时似乎没有任何变化。直觉上我认为我在调用 df 时搞砸了一些事情,但我不确定是什么:
df.list <- list(df0, df1, df2, df3)
myFunc <- function(df) {
df <- df[order(df$attribute_2, -df$lastpage),]
df <- df[!duplicated(df$attribute_2),]
return(df)
}
df.list <- lapply(df.list, FUN = myFunc)
非常感谢您的帮助! 我已经查看了所有关于 lapply 函数的类似问题,特别是这个:Applying a set of operations across several data frames in r 我可能犯了一个非常明显的错误,但我就是找不到。
编辑:感谢大家的帮助 对于任何想知道我现在到底使用什么代码的人:
df.list <- list(df0, df1, df2, df3)
myFunc <- function(x) {
x <- x[order(x$attribute_2, -x$lastpage),]
x <- x[!duplicated(x$attribute_2),]
}
df.list2 <- lapply(df.list, myFunc)
df2_c<-df.list2[[3]]
【问题讨论】:
-
请通过添加示例数据使您的示例更具重现性。
-
lapply 适用于矢量,而不适用于列表,即使参数被称为“列表”..也许您可以尝试使用矢量..如果您无法制作数据帧矢量,您必须使用字符串向量(您的 df 的名称),然后在函数中使用 eval 进行一些更改。此外,在函数内部,您可以更改全局对象并不明显,因此请尝试使用 "
-
@MrSmithGoesToWashington Lists are 向量在 R 中。
lapply与列表一起工作得很好。而且<<-在这里也不合适。 -
@KonradRudolph:是的,你当然是对的 .. 你能解释更多关于“
-
@MrSmithGoesToWashington
<<-在父环境中执行赋值,但 OP 不希望这样做(它会在全局环境中创建并反复覆盖一个名为df的变量)。跨度>