如何正确循环而不使用eval、parse、text=paste(";…在R中)

如何正确循环而不使用eval、parse、text=paste(";…在R中),r,parsing,eval,R,Parsing,Eval,所以我有一个朋友帮我写了一些R代码,我觉得问这个问题很糟糕,因为代码很好用,但我很难理解和修改它,我觉得它不是正确的或合适的代码 我正在将文件加载到单独的R数据帧中,标记为x1、x2…xN等 我想组合数据帧,这是我们要处理的代码: assign("x",eval(parse(text=paste("rbind(",paste("x",rep(1:length(toAppend)),sep="",collapse=", "),")",sep="")))) “toAppend”是加载到x1、x2等

所以我有一个朋友帮我写了一些R代码,我觉得问这个问题很糟糕,因为代码很好用,但我很难理解和修改它,我觉得它不是正确的或合适的代码

我正在将文件加载到单独的R数据帧中,标记为x1、x2…xN等

我想组合数据帧,这是我们要处理的代码:

assign("x",eval(parse(text=paste("rbind(",paste("x",rep(1:length(toAppend)),sep="",collapse=", "),")",sep=""))))
“toAppend”是加载到x1、x2等数据帧中的文件列表

如果没有所有的文字编码技巧,它应该是这样的:

x <- rbind(##x1 through xN or some loop for 1:length(toAppend)#)

x如果这些数据帧都具有相同的结构,您可以通过在
read.table
read.csv
步骤中使用'colClasses'参数来节省大量时间。
lappy
函数可以将其传递给
read.
函数,如果您使用Dason对您实际操作的猜测,则:

 x <- do.call(rbind, lapply(file_names, read.csv, 
                                colClasses=c("numeric", "Date", "character")
               ))   # whatever the ordered sequence of classes might be

x你能为我们做一个测试吗?如果不能,R的习惯用法应该是类似于
do.call(data.frame,lappy(file\u names,read.csv))
。我还建议你把你的问题分成几个单独的部分,阅读任何优秀的“R简介”看起来他们想把这些东西贴在彼此的上面,而不是并排粘贴,所以
do.call(rbind,lappy(文件名,read.csv))会更合适。不管怎样,把对象放进一个列表中,使用<代码>。用适当的函数调用< /代码>是OP可能要做的。@ Dason你是对的,我漏掉了类型。你应该考虑从最新的角度看<代码> Frad 函数(开发版本?
data.table
软件包的版本,以及更一般的
data.table
软件包…谢谢!我提供的信息最终起到了帮助。原始代码在读取数据时将文件名添加到了一个新列中,但在使用此应答代码时,我丢失了该文件名。文件名列对于我来说是uniq所必需的uely标识数据来自何处。相反,我修改了源数据文件(在备份它们之后),以便在脚本的前面添加所需的列。