这是研究中积累的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
}