在单词之间粘贴输入名称以使用 write.table 保存
Posted
技术标签:
【中文标题】在单词之间粘贴输入名称以使用 write.table 保存【英文标题】:paste input name between words for save it using write.table 【发布时间】:2020-04-08 11:53:06 【问题描述】:我是 R 的超级新手,由于我的工作学位,我已经为自己学习了几个星期。
我几乎完成了我需要的统计分析,但它是通过一个丑陋而凌乱的代码,即为几个数据帧重复大量代码,以应用不同的统计测试,保存结果等。
好吧,现在,出于个人兴趣,想写得更好,但我完全陷入了我的无知之中,真的需要推动才能得到这个想法,拜托。
例如,我想创建一个函数来测量我使用的所有数据表的相关性,并将这些结果保存为表,使用输入名称作为输出名称的一部分。
我的意思是,如果我们有虹膜数据但在不同季节进行测量,例如iris_fall、iris_winter、iris_spring 和 iris_summer,在将cor(X)
方法应用于每个之后,我想将这些结果保存为名为“mCoriris_fall.txt”、“mCoriris_winter.txt”、“mCoriris_spring.txt”和“mCoriris_summer.txt”的表格“ 分别。
我现在无用的代码说:
cor_PQ<-function(X)
cor_PQ<-cor(X, use="pairwise.complete.obs")
return(cor_PQ)
savecor<-function(t)
outputname<-(paste0("mCor",t)) #HOW DO I CALL THE NAME OF THE INPUT? t is cor_PQ result matrix.
savecor<-write.table(t, file=paste0(outputname,".txt"))
return(savecor)
cor_PQ(Iris_fall)
我希望得到cor
结果并将其作为表格保存在我的工作区中,使用输入名称作为输出名称的一部分。
我知道这是 2 个单独的函数,一个要写表的函数应该在 cor(x)
的函数内,但我不明白怎么做。
我读了很多书,但我无法完全适应我的脑海。
感谢任何可以帮助我的人。
问候。
直到这里它被解决了......
但是在使用我的 14 个数据框列出应用 cor
和其他方法后,write.table
函数会覆盖 1 个单个文档上的 14 个 cor
结果。这是我的代码。
PQ_files<-list.files(path="C:/Users/Sol/Documents/ProyectoTítulo/CalidadAgua/Matrices/Regs",pattern="\\_PQ.txt")
PQ_data<-lapply(PQ_files, read.table)
names(PQ_data)<-gsub("\\_PQ.txt","", PQ_files)
PQ_data
cor_PQ<-function(X)
cor_PQ<-cor(X, use="pairwise.complete.obs")
outputname.txt<-paste0("mCor",deparse(substitute(X)),".txt")
write.table(cor_PQ, file=outputname.txt)
outputname.pdf<-paste0("Cor",deparse(substitute(X)),".pdf")
pdf(outputname.pdf)
plot(X)
dev.off()
return(cor_PQ)
for (i in seq_along(PQ_data))
Correlaciones<-lapply(PQ_data,cor_PQ)
Correlaciones
在 SUM 上:似乎工作得几乎很好,直到 write.table
和 plot(x)
分别覆盖我的 PQ_data
上的 14 个数据帧的输出,名称分别为 mCor[[i]]
和 CorX[[i]]
。
我应该以某种方式定义 [i] 以使每个结果都具有正确的名称吗?
另外,当我最后运行Correlaciones
时,我可以在一个数据帧中看到14 个数据帧的cor
结果,但我不知道如何正确拆分它们。
我想差不多了。
再次感谢!
【问题讨论】:
【参考方案1】:你可以结合这两个函数,使用deparse
substitute
获取输入名称作为字符串
cor_PQ <- function(X)
cor_PQ<-cor(X, use="pairwise.complete.obs")
outputname<- paste0("mCor",deparse(substitute(X)), ".txt")
write.table(t, file=outputname)
return(cor_PQ)
然后调用
cor_PQ(Iris_fall)
【讨论】:
太棒了!这正是我一直在寻找的。谢谢你罗纳克。考虑到我真的不知道这一切是如何工作的......可以创建一个我的数据框(数据库)列表以在运行函数时使用,我只执行一次而不是 4(虹膜季节)或 12(我的工作)。再次感谢! @CristóbalJarabaNilo 是的,如果数据框的名称中没有模式,您可以手动将它们添加到列表中并使用lapply
应用函数,例如 lapply(list(Iris_fall, Iris_winter, Iris_spring, Iris_summer), cor_PQ)
或者如果他们的名称中有模式,例如他们都以Iris
开头,我们可以做lapply(mget(ls(pattern = '^Iris')), cor_PQ)
好吧,这并没有给我带来我想要的东西,但它有助于找到解决方案......但现在我又陷入了一个问题。好的,给你我研究的背景,我使用 14 data.frames
,我想应用几种统计方法......因此,与在 cor
函数中添加 write.table
函数相关的问题已解决,而不是我用我的 14 个 data.frames 制作了一个列表,我可以对列表中的所有元素(数据框)运行 cor
函数。所以,现在的问题是 write.table
用变量 [[i]] 覆盖每个 cor
结果。
您好 Ronak,再次感谢您的帮助。我刚刚编辑了原始的 Ask 试图解释我的下一个问题。如果我不使用for
,它也可以工作,但问题是function
中的write.table
cor
覆盖了应用于我列表中每个数据帧的每个cor
方法的结果(PQ_files)。谢谢!
我应该将 cor_PQ function
中的“X”定义为列表吗? .... 因为当我运行cor
时,它将列表中每个数据帧的名称(PQ_data)作为 [i],所以它只给了我一个名为 mCor[[i]] 的输出表,即方式,通过我列表中的 14 个数据帧覆盖......因此保存的文件仅包含来自 cor
的值应用于我列表中的最后一个数据帧。以上是关于在单词之间粘贴输入名称以使用 write.table 保存的主要内容,如果未能解决你的问题,请参考以下文章
如何使用特定单词在excel中复制一行并粘贴到另一个excel表?
Winforms 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式
编写程序,输入字符串(包含空格),统计其中单词的个数,单词之间以一个或多个空格分隔。