更改变量并在R

时间:2016-02-12 14:41:36

标签: r for-loop save

我有一段用R编写的代码,我应该把它放在for循环中。我是R的新手,所以我请求你的帮助。

我打破了代码:

导入lmerTest包

library(lmerTest)

加载一个表(这应该在for循环之外

table = read.csv("path/namefile.csv")
table_data = table
table_data[table_data == "<undefined>"] <- NA
na_rows <- is.na(table_data[,4])
table_data_sub <- table_data[!na_rows,]

我计算模型,这应该在for循环中,STAGE1应该每次都改变。特别是它应该是STAGE1,STAGE2,......,直到STAGE13。 所有这些变量都是talbe table_data_sub

的列

开始循环

TNST.model <- lmer(STAGE1 ~ Patient_type+Gender+Age+(1|Subject),data=table_data,REML=FALSE)

我计算最小二乘意味着

TNST.model_ls <-lsmeans(TNST.model)
difflsmeans_TNST<-difflsmeans(TNST.model, test.effs=NULL)

我将输出保存在2个文件中,这些文件应根据STAGE

更改名称
out_file <- file("/path/STAGE1_diffmean.csv", open="a")  #creates a file in append mode
for (i in seq_along(difflsmeans_TNST)){
  write.table(names(difflsmeans_TNST)[i], file=out_file, sep=",", dec=".", 
              quote=FALSE, col.names=FALSE, row.names=FALSE)  #writes the name of the  list elements ("A", "B", etc)
  write.table(difflsmeans_TNST[[i]], file=out_file, sep=",", dec=".", quote=FALSE, 
              col.names=NA, row.names=TRUE)  #writes the data.frames
}
close(out_file)  #close connection to file.csv

out_file <- file("/path/STAGE1_leastmean.csv", open="a")  #creates a file in append mode
for (i in seq_along(TNST.model_ls)){
  write.table(names(TNST.model_ls)[i], file=out_file, sep=",", dec=".", 
              quote=FALSE, col.names=FALSE, row.names=FALSE)  #writes the name of the  list elements ("A", "B", etc)
  write.table(TNST.model_ls[[i]], file=out_file, sep=",", dec=".", quote=FALSE, 
              col.names=NA, row.names=TRUE)  #writes the data.frames
}
close(out_file)  #close connection to file.csv

for循环结束

1 个答案:

答案 0 :(得分:0)

这很简单。

要迭代矩阵/数据框的列(或行),您只需使用apply。将循环的逻辑放在一个函数(获取行/列)中,然后指示是否要迭代行或列。例如:

data(cars)

result <- apply(cars, 2, mean)

计算cars中每列的平均值。输入?apply以获取有关该方法的更多信息。有些变体会迭代列表,数组等。