获取列表中的数据帧名称

时间:2014-12-07 03:20:44

标签: r

如何获取列表中数据框的名称?不是数据框内的列,而是数据框本身。所以这就是我所拥有的:

mydata <- lapply(myfiles, read.csv, stringsAsFactors=FALSE)
fileNames <- list.files(pathx,pattern = "*.csv") 
names(mydata) <- gsub("\\.csv", "", fileNames) 
results <- lapply(mydata,myFUN)

名称,比方说是[df1,df2,df3...]。现在,根据数据框的名称,myFUN执行某项任务。如果我试试这个

myFUN = function(data){
  dataFrameName = substitute(data)
  ... #do stuff
}

dataFrameName代替X[[1L]]代替df1代替X[[2L]]代替df2。在列表中获取数据框名称的更好方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您只是从文件列表中读取,则数据框没有名称:您看到的[[1]]和[[2]]是列表索引。如果您希望执行根据data.frame而变化的操作,那将会变得非常难看。你可以做的最好的事情是:

myData <- lapply(fileNames, function(x){
    holding <- read.csv(x, stringsAsFactors = FALSE)
    holding$periodicity <- gsub("\\.csv", "", x) 
    return(holding)
})

results <- lapply(myDate, myFUN)

... myFun中的决策树现在可以根据每个data.frame的“周期性”列中的值进行操作。这是一个丑陋的黑客攻击(并不会是最快的东西:每次修改像这样的数据框架时,你必须复制它,这很昂贵)。

或者,您可以查看类似Mapmapply的内容(想想lapply,但它需要多个输入)并忽略命名变量的问题;你会将myData和通过gsub调用提取的名称传递给mapply,并最终得到一个函数,该函数具有df1和名称“df1”。

但是,老实说,我的建议是你试图在管道太远的地方解决问题。虽然这将工作,如果您依赖的数据决定执行什么分析,它应该包含在文件中,以便可以读入,而不是包含在文件名。无论是谁制作文件并要求他们理智; p