【发布时间】:2020-04-10 01:39:38
【问题描述】:
我几乎完成了messy code 以将几种统计方法/测试应用于来自不同流域的 11 个数据帧,其中物理化学参数作为变量。我达到了目标,但我需要做到这一点。
因此,首先我创建了一个计算相关性的函数,并将结果保存为 .txt 表格和 .pdf 图像。
一次将函数运行到一个数据帧时效果很好(为此,您应该使用read.table 单独导入每个数据帧,下面的代码中没有写)。
因为我希望它能够正常工作,所以列出了 11 个数据帧并使用lapply 对每个数据帧运行该函数。它的工作原理是给我一个列表 (corr),其中包含每个数据帧的相关结果。
问题来了:
- 列表
cor与每个数据帧的相关结果看起来像是有值而不是数据帧,所以我不知道如何访问或保存它们(请参阅环境/数据窗口中的corr列表)。好吧,直到这里,至少看起来相关结果在某处存在。 - 第二个问题是,当我运行
corr<-lapply(PQ_data, cor_PQ)时,它有一行使用计算的原始数据帧的部分名称(例如PQ_data是"AgIX_E_PQ"所以cor_PQ(PQ_data[["AgIX_E_PQ"]]的表和图应该分别得到名称“mCorAgIX_E_PQ.txt”和“CorAgIX_E_PQ.pdf”),我只得到一个输出(mCorX[[I]].txt 和 CorX[ [i]].pdf) 与最后一个数据帧相关结果。也就是说,每个数据帧相关结果的表格和图像都被覆盖到这个泛型 mCorX[[I]].txt、CorX[[i]].pdf 文件中。
现在我想必须定义“i”或其他东西来避免这种情况。我应该为PQ_data 定义cor_PQ 函数而不是X?
如果有人能看到我失败的地方,我将不胜感激任何帮助解决这个问题。
我的数据:PQ_data /将其保存在您的工作区中并用它修复setwd。
我的代码:
rm(list=ls(all=TRUE))
cat("\014")
setwd("C:/Users/Sol/Documents/ProyectoTítulo/CalidadAgua/Matrices/Regs") #my workspace
PQ_files<-list.files(path="C:/Users/Sol/Documents/ProyectoTítulo/CalidadAgua/Matrices/Regs",
pattern="\\_PQ.txt") #my list of 14 dataframes in my workspace.
PQ_data<-lapply(PQ_files, read.table) #read tables of the 14 dataframes in the list.
names(PQ_data)<-gsub("\\_PQ.txt","", PQ_files) #name the 14 dataframes with their original names.
#FUNCTION TO COMPUTE CORRELATIONS, SAVE TABLES AND PLOTS.
cor_PQ<-function(X) {
corPQ<-cor(X, use="pairwise.complete.obs")
outputname.txt<-paste0("mCor",deparse(substitute(X)),".txt")
write.table(corPQ, file=outputname.txt)
outputname.pdf<-paste0("Cor",deparse(substitute(X)),".pdf")
pdf(outputname.pdf)
plot(X)
dev.off()
return(corPQ)
}
corr<-lapply(PQ_data, cor_PQ)
之后,正如我所说,得到一个名为“corr”的列表,其中包含 11 个元素,其中包含来自列表 (PQ_data) 中每个数据帧的相关结果,但是当我将“corr”列表固定在我的环境/数据窗口(它们不显示蓝色 R 箭头来展开元素)。
`
我只得到 2 个名为 mCorX[[I]].txt 和 CorX[[i]].pdf 的输出文件,仅显示最后一个数据帧相关结果,因为 write.table 和 .pdf 函数会覆盖前 10 次计算的结果。
再次,我将不胜感激任何帮助。我真的需要推动才能抓住这个想法。
谢谢!!!
【问题讨论】:
-
你可以
lapply(names(PQ_data), cor_PQ)然后将X替换为PQ_data[[X]]并将deparse(substitute(X))替换为X在函数cor_PQ中。 2个附加说明:(1)我会在函数cor_PQ中使用除cor_PQ之外的变量名和(2)你的意思是绘制X(即数据框)还是相关矩阵? -
您好,感谢您的支持。当我将
PQ_data[[X]]放在我的cor_PQ函数中时,由于括号而出现意外错误。我应该在哪里更换它?关于你的笔记,(1)你的意思是cor_PQ<-cor(X, use="pairwise.complete.obs")中的cor_PQ应该被定义为另一个变量吗?我想我不知道为什么会这样,并且(2)对于plot(x),我希望函数绘制来自计算的数据框(总共14个)的相关结果,以便能够按照通用方法将其保存为@ 987654354@ -
See here 提出一个可重复的问题——其中包括要处理的数据样本。现在我们无法运行您的代码,也看不到任何输出。还请重读minimal reproducible example 的minimal 部分——将问题简化为最重要的部分,这样人们可以更轻松地帮助解决问题,并且是您自己调试的良好第一步
-
@camille 我刚刚编辑了我的帖子并添加了我的数据,以便您检查和运行。感谢您的时间和支持。
标签: r pdf lapply overwrite write.table