在单词之间粘贴输入名称以使用 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.tableplot(x) 分别覆盖我的 PQ_data 上的 14 个数据帧的输出,名称分别为 mCor[[i]]CorX[[i]]。 我应该以某种方式定义 [i] 以使每个结果都具有正确的名称吗? 另外,当我最后运行Correlaciones 时,我可以在一个数据帧中看到14 个数据帧的cor 结果,但我不知道如何正确拆分它们。 我想差不多了。 再次感谢!

【问题讨论】:

【参考方案1】:

你可以结合这两个函数,使用deparsesubstitute获取输入名称作为字符串

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 保存的主要内容,如果未能解决你的问题,请参考以下文章

删除PHP中两个单词之间的空格[重复]

如何使用特定单词在excel中复制一行并粘贴到另一个excel表?

Winforms 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式

编写程序,输入字符串(包含空格),统计其中单词的个数,单词之间以一个或多个空格分隔。

c语言以键盘输入一串英文字符串,给各个单词之间以空格分开,统计其中有多少个英文单词(用基础方法做 急

匹配在用户输入的两个字符之间开始的名称