R_研究过程中积累的小技巧_entry 1

这是研究中积累的R语言相关的小技巧的第一篇总结博客

关键词: gsub; shell; names; cbind; append;

需求1:一个41列的data frame(名为mydata)要改变最后一列的列名并需要将这一列移动到第一列的位置,而原来的第一列及其他依次后移。

解法:

names(mydata)[41]<-"ID"
mydata<-cbind(mydata[41],mydata[,1:40])

需求2: 需要使用一个已经编译好的exe文件去跑一个有50个数据的数据集,这个exe文件每次运行会调用相同路径下的一个名为args.txt的文件,来得到每次要跑的数据名(如test_1.txt)和每次要输出到的文件名(如result_1.txt)。所以每跑一次数据要修改一次args.txt文件来使exe文件能正确读取下一个要跑的数据并正确输出到对应的txt中。如何用R实现?

解法:

#首先需要讲args.txt中的初始输入文件名和输出文件名设置正确
for(i in 1:49){
    setwd("path\\to\\your\\folder")
    shell("path\\to\\your\\folder\\example.exe")
    data <- readLines("path\\to\\your\\folder\\args.txt")
    data=gsub(paste("test_",i,".txt",sep=""),paste("test_",i+1,".txt",sep=""),data)
    data=gsub(paste("result_",i,".txt",sep=""),paste("result_",i+1,".txt",sep=""),data)
    write.table(data,"path\\to\\your\\folder\\args.txt",row.names=F,col.names=F,quote=F)
}
shell("path\\to\\your\\folder\\example.exe")#执行最后一次掉用

需求3: 需求2中掉用exe后输出的50个输出文件需要放到一个文件里面,方便统计结果,并且这50个输出文件中每个输出文件都不需要前20行无用数据,如何用R实现?

解法:

for(i in 1:50){
  newdata<-read.table(paste("path\\to\\your\\file\\","result_",i,".txt",sep=""),skip = 20)#忽略前20行
  write.table(newdata,file = "path\\to\\your\\file\\Final_result.txt",append = T, row.names= F, col.names= F, quote= F )#全部输出到Final_result.txt中
}

需求4: R中有没有类似matlab的ones函数和zeros函数?

解法:

aaa<-matrix(0,m,n)#zeros(m,n)
bbb<-matrix(1,m,n)#ones(m,n)

或者:

aaa<-rep(0,m*n); dim(aaa)<-c(m,n)#zeros(m,n)
bbb<-rep(1,m*n); dim(bbb)<-c(m,n)#ones(m,n)

甚至,写成函数形式:

zeros<-function(nrow,ncol){
    #调用方式1 zeros(3,4)
    #调用方式2 aaa<-zeros(3,4);aaa
    tmp<-matrix(0,nrow,ncol);
    tmp
}

猜你喜欢

转载自blog.csdn.net/s_gy_zetrov/article/details/78682629
今日推荐