如何在数据框列表上使用lapply并使用获取列表ID名称的函数

时间:2015-05-25 08:14:14

标签: r

我有以下数据框列表:

d1 <- data.frame(y1=c(1,2,3),y2=c(4,5,6))
d2 <- data.frame(y1=c(3,2,1),y2=c(6,5,4))
df <- list(FOO=d1, BAR=d2)

看起来像这样:

> df
$FOO
  y1 y2
1  1  4
2  2  5
3  3  6

$BAR
  y1 y2
1  3  6
2  2  5
3  1  4

一个绘制每个单独数据框并根据列表ID命名它们的函数:

plot_df_func <- function(basename="QUX",in_df) {
    outfile <- paste(basename,".png",sep="")

    png(outfile)
    plot(in_df,main=basename)
    dev.off()
}

在这种情况下如何使用lapply

在一天结束时,它会有&#34; FOO.png&#34;和&#34; BAR.png&#34;。

我尝试了但失败了:

> lapply(df, plot_df_func) 
Error in plot(in_df, main = basename) : 
  argument "in_df" is missing, with no default

1 个答案:

答案 0 :(得分:1)

我会使用for循环。在我看来,如果你只想要副作用(比如绘图或文件)而且没有返回值,那么for循环总是更好。

d1 <- data.frame(y1=c(1,2,3),y2=c(4,5,6))
d2 <- data.frame(y1=c(3,2,1),y2=c(6,5,4))
df <- list(FOO=d1, BAR=d2)

plot_df_func <- function(basename="QUX",in_df) {
  #outfile <- paste(basename,".png",sep="")

  #png(outfile)
  plot(in_df,main=basename)
  #dev.off()
}

layout(1:2)
for (i in names(df)) plot_df_func(i, df[[i]])

resulting plot