使用应用函数代替R中的For循环

mks*_*212 1 for-loop r apply

我在R中推进并且在第一次成功地使用lapply来加载一个名为ImportData()的函数中的文件.工作职能是:

AllData <- lapply(files, function(i){
    read.csv(i, stringsAsFactors = FALSE)
  })
Run Code Online (Sandbox Code Playgroud)

AllData是包含4个数据帧的列表.在未来,它将包含更多.

函数中有两个for循环,我想用lapply替换.第一个是将日期和时间列组合成一个时间戳的循环.我正在抛弃我创建应用功能.

  for (i in 1:length(AllData))
   {
    AllData[[i]]$Date <- strptime(paste(AllData[[i]]$Date, AllData[[i]]$Time), "%m/%d/%y %H:%M:%S")
    AllData[[i]] <- AllData[[i]][-2]
    }
Run Code Online (Sandbox Code Playgroud)

最后一个循环就是这个.names(AllData)是长度为4的字符向量.

  for (i in 1:length(names(AllData)))
  {
    cat("Time Frame: ", names(AllData)[i], "\n")
    trade(AllData[[i]])
  }
Run Code Online (Sandbox Code Playgroud)

在这种情况下扔我的是[[i]].我似乎无法通过lapply工作.

谢谢您的帮助.

ags*_*udy 5

使用forxxpply函数之一替换是好的,但更好的是使用向量化函数.

这里例如,不需要使用for因为操作被矢量化.所以应该写第一个循环:

AllData$Date <- 
         strptime(paste(AllData$Date, AllData$Time), "%m/%d/%y %H:%M:%S")
Run Code Online (Sandbox Code Playgroud)

第二个循环也是一样:

cat(paste("Time Frame: ", names(AllData), "\n"))
Run Code Online (Sandbox Code Playgroud)

编辑如果你有一个data.frames列表,你可以在这里使用循环:

  for (x in seq_along(AllData)){
       x$Date = strptime(paste(x$Date, x$Time), "%m/%d/%y %H:%M:%S")
   }
Run Code Online (Sandbox Code Playgroud)