如何获取列表中数据框的名称?不是数据框内的列,而是数据框本身。所以这就是我所拥有的:
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
。在列表中获取数据框名称的更好方法是什么?
谢谢!
答案 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的“周期性”列中的值进行操作。这是一个丑陋的黑客攻击(并不会是最快的东西:每次修改像这样的数据框架时,你必须复制它,这很昂贵)。
或者,您可以查看类似Map
或mapply
的内容(想想lapply,但它需要多个输入)并忽略命名变量的问题;你会将myData和通过gsub调用提取的名称传递给mapply,并最终得到一个函数,该函数具有df1和名称“df1”。
但是,老实说,我的建议是你试图在管道太远的地方解决问题。虽然这将工作,如果您依赖的数据决定执行什么分析,它应该包含在文件中,以便可以读入,而不是包含在文件名。无论是谁制作文件并要求他们理智; p