如何通过函数传递列表并保存列表中每组输入的输出

时间:2014-05-17 23:51:47

标签: r

所以,假设我有以下数据集:

    X   N   A   B     C
1   5   1   1   0.1   0.1
2   10  1   1   0.1   0.2
3   15  1   2   0.2   0.4
4   20  1   3   0.3   0.8
5   25  2   5   0.5   1.6
6   30  2   8   0.8   3.2
7   35  2   13  1.3   6.4
8   40  2   21  2.1   12.8
9   45  3   34  3.4   25.6
10  50  3   55  5.5   51.2
11  55  3   89  8.9   102.4
12  60  3   144 14.4  204.8

我有两个功能。其中一个从上面创建了一个新的数据框:

funcd<- function(s, n) {
d=data[data$N==n,]
d2<-data.frame(d$X)
d2$N<-d$N; d2[[s]]<-d[[s]]
d2
}

你在's'中放入一个列标题,'n'是列N中的一个值。例如:

>funcd("A", 1)
  d.X N A
1   5 1 1
2  10 1 1
3  15 1 2
4  20 1 3

基本上,它从旧的一列(A,B或C)中生成一个新数据框,并且在所选列中只生成具有N = n的行(在示例中, 1,2或3)。它也保留了原始数据框中的“X”和“N”列。

我的第二个函数绘制了上述任何一列的图表,用于将第二个数据(无论是作为's'放置)与行中第X列中的值相对应,无论“n”的值是什么

funcp<-  function(s, n) {
d=data[data$N==n,]
d2<-data.frame(d$X)
d2$N<-d$N; d2[[s]]<-d[[s]]
plot(d2$d.X, d2[[s]])
}

所以funcp(“A”,1)给出了一个简单的A列与d.X列的简单图,来自我上面的funcd例子(“A”,a)

现在我要做的是将funcd输出中的数据集保存为txt文件,将funcp中的图保存为png文件,我知道我可以为每个输入集合手动执行:

write.table(funcd("A", 1), "C:\\Users\\Username\\Documents\\data.txt")

png(filename="C:\\Users\\Username\\Documents\\plot.png")
funcp("A", 1)
dev.off()

分别。但是,假设我需要文本文件和以下每个输入的函数图:(“A”,1),(“B”,2)和(“C”,3)。如何为每个输入自动创建输出功能的文件,而无需为每个输入手动保存它们?可以这么说,对于我的实际数据集,它不仅仅是A,B和C,而是几百列,我的'N'值也是如此。所以我想创建一个脚本,可以从图中的图像文件(或数据框中的文本文件)为列表中的每组输入的函数输出,该列表类似于((“A”, 1“),(”B“,2)......)。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我对你要问的内容有点困惑,但如果你只是想创建独特的文件名,那么

s<-"A"; n<-1
png(filename=paste("C:\\Users\\Username\\Documents\\plot.", s, ".", m, ".png", sep="")
funcp(s, n)
dev.off()

会为每个png提供不同的文件名。

如果你想迭代所有s / n组合,你可以做

expand.grid(s=c("A","B","C"), n=1:3)

如果您愿意,可以将这些结果提供给mapply

mm<-expand.grid(s=c("A","B","C"), n=1:3)
mapply(funcp, mm$s, mm$n)