【问题标题】:Running a function multiple times in R在 R 中多次运行一个函数
【发布时间】:2013-11-01 01:33:41
【问题描述】:

我有 100 个 *.csv 格式的数据集,名称相同但索引不同:myarray1、myarray2、...、myarray100。 我编写了一个函数来读取这些数据集并做一些事情,但我不想运行该函数 100 次。这是函数的主要部分:

 Myfunc <- function(file){
 setwd("C:\\Users\\Desktop\\mydaya")
 data.temp1 <- read.csv("C:\\Users\\Desktop\\mydata\\myarray1.csv",header=FALSE)
 .......
 #core of function
 .....
 }

是否可以以某种方式编写一个 for 循环来运行函数本身 100 次,同时在函数内部的第三个命令行中更改“myarray ...”的索引: 例如

中的 myarray1
  data.temp <- read.csv("C:\\Users\\Desktop\\mydata\\myarray1.csv",header=FALSE) 

在函数的第二次运行中变为 myarray2,依此类推,最多 100 次。

【问题讨论】:

  • 是的,但是您希望 data.temp 在加载 100 个文件后看起来像什么?
  • 看到这个答案stackoverflow.com/questions/2098368/…你可以在你的for循环中使用字符串连接
  • @Awokeknowing;好问题。其实我在这里更正一下。它应该是 data.temp+index 并且每次 myarray 更改时都会更改。所以在一天结束时,我有 100 个同名但索引不同的 data.temp。 data.temp1, data.temp2,...,data.temp100.

标签: r function csv for-loop


【解决方案1】:

我认为使用这样的变量名不是一个好主意。将数据存储在列表中会更好。我建议以下方法

setwd("C:\\Users\\Desktop\\mydata")
files <- dir(pattern = 'myarray.*\\.csv')

dataList <- lapply(files, FUN = Myfunc ) 

然后您可以使用 dataList[[1]] 、 dataList[[2]] 等来引用各种数据帧。使用 list 比使用变量 list data.temp1、data.temp2 等要容易得多。

【讨论】:

  • @geektrader;我使用了 laply,但收到此错误消息:match.fun(FUN) 中的错误:找不到对象“myfunc”
【解决方案2】:

你确定你不是指read.csv(file, header=FALSE) 吗?

那你就可以了

lapply(paste0("myarray", 1:100, ".csv"), Myfunc)

【讨论】:

  • @尼尔·富尔茨;我使用了 laply,但收到此错误消息:match.fun(FUN) 中的错误:找不到对象“myfunc”
  • R 区分大小写;您需要匹配定义函数的位置和在lapply() 中使用它的位置之间的大小写。
  • 是的,我知道。你能想出其他导致错误的原因吗?
  • R 没有找到你的函数;运行 ls() 并确保它在那里。
猜你喜欢
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多