所以,假设我有以下数据集:
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)......)。
感谢您的帮助。
答案 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)