将自定义函数应用于r

时间:2015-09-09 08:39:46

标签: r

我正在尝试使用数据框中的每一行作为函数的输入来处理某些数据,然后将输出写入csv文件。根据以下示例

myfunction <- function(X, Y, Z){

                       data <- read.csv("mydata.csv")
                       subsetedData <- subset(data, x=X & y=Y & z=Z, select=x:z)
                       write.csv(subsetedData, file="mycsvfile.csv")
                       }

apply(myXYZdata, MARGIN = 1, function(x1, x2, x3) myfunction(X, Y, Z))

我想根据数据框myXYZdata中的每一行进行子集化。但是,这似乎不起作用,或者我不完全理解apply的正确用法。

我知道这可以使用循环来完成,但不希望这样做。

编辑:

这样做的目的是我有一个大型数据文件,我希望根据我的数据框中找到的变量组合进行分组&#34; myXYZdata&#34;并将结果存储在新的数据文件中。

我想要子集的大数据文件格式为。

date                      x   y  z    count          
1 2015-08-20 00:00:00.000 a   d  h    56
2 2015-08-26 00:00:00.000 b   e  h     4
3 2015-08-18 00:00:00.000 b   f  i     8
4 2015-09-03 00:00:00.000 c   e  l     32
5 2015-08-12 00:00:00.000 a   g  l     3

2 个答案:

答案 0 :(得分:2)

我相信将一行作为参数传递给你的函数会更容易。

myfunction <- function(row){

                   data <- read.csv("mydata.csv")
                   subsetedData <- subset(data, x=row[1] & y=row[2] & z=row[3], select=x:z)
                   write.csv(subsetedData, file="mycsvfile.csv")
                   }

apply(myXYZdata[,c("X","Y","Z")], MARGIN = 1, myfunction)

答案 1 :(得分:1)

使用mapply(多变量应用)怎么样:

mapply(myfunction, myXYZdata$X, myXYZdata$Y, myXYZdata$Z, fnms)

您需要创建一个文件名向量(fnms),以便将每个条目写入另一个文件,然后更改myfunction,以便它接受文件名的参数。 / p>

或者将append = TRUE作为write.csv中的myfunction的参数,将其全部写入同一文件(但请注意,连续运行的代码不会覆盖文件 - 您可以在write.csv(..., append = TRUE)之前加if(file.exists("mycsvfile.csv")) file.remove("mycsvfile.csv"))。