如何创建ppcor函数循环?

时间:2019-02-15 18:48:21

标签: r

我正在尝试创建一个循环,以使用ppcor函数对存储在数据帧中的变量执行相关操作(并在将来进行部分相关操作)。对于所有相关性,第一个变量(A)都将保持不变,而第二个变量(B)将是数据框中下一列中的下一个变量。我大约有1000个变量。

下面以mtcars数据集为例,因为它与我的数据处于同一布局。

当在数组(“ tmp_df”)上运行ppcor之前,使用cbind手动绑定2列(感兴趣的2个变量)手动执行时,我已经能够成功完成操作。这样便可以将关联操作(“ mpg_cycl”),(“ mpg_disp”)的输出绑定到单个对象中。但是,我无法让此操作中的任何一个循环工作。有什么想法吗?

library("MASS")
install.packages("ppcor")
library("ppcor")

mtcars_df <- as.data.frame(mtcars)

tmp_df = cbind(mtcars_df$mpg, mtcars_df$cycl)

mpg_cycl  <- pcor(as.matrix(tmp_df), method = 'spearman')

tmp_df1= cbind(mtcars_df$mpg, mtcars_df$disp)

mpg_disp  <- pcor(as.matrix(tmp_df1), method = 'spearman')

combined_table <- do.call(cbind, lapply(list("mpg_cycl" = mpg_cycl, 
mpg_disp" = mpg_disp), as.data.frame, USE.NAMES = TRUE)) 

试图循环执行上述##操作(在上次审阅者的评论之后进行了修饰:

for (i in mtcars_df[2:7]){
tmp_df = (cbind(i, mtcars_df$mpg)
i <- pcor(as.matrix(tmp_df), method = 'spearman')
write.csv(i, file = paste0("MyDataOutput",i[1],".csv")

}

我希望循环将两个相关结果输出到MyDataOutput csv文件。但这会生成一条错误消息,我以为我在正确的位置?:

错误:出现意外符号: “ tmp_df =(cbind(i,mtcars_df $ mpg)   我”

即使在末尾添加大括号也无法解决问题,因此我将其遗漏,因为它引入了另一个错误消息'}'

1 个答案:

答案 0 :(得分:0)

我已经重做了一些代码,并修复了丢失的)}"。现在,for cyckle输出文件的名称为变量名。希望这会有所帮助。

library("MASS")
#install.packages("ppcor")
library("ppcor")

mtcars_df <- as.data.frame(mtcars)

tmp_df = cbind(mtcars_df$mpg, mtcars_df$cycl)

mpg_cycl  <- pcor(as.matrix(tmp_df), method = 'spearman')

tmp_df1= cbind(mtcars_df$mpg, mtcars_df$disp)

mpg_disp  <- pcor(as.matrix(tmp_df1), method = 'spearman')

combined_table <- do.call(cbind, lapply(list("mpg_cycl" = mpg_cycl, 
                                             "mpg_disp" = mpg_disp), as.data.frame, USE.NAMES = TRUE)) 

for(i in colnames(mtcars_df[2:7])){
tmp_df = mtcars_df[c(i,"mpg")]
i_resutl <- pcor(as.matrix(tmp_df), method = 'spearman')
write.csv(i_resutl, file = paste0("MyDataOutput_",i,".csv"))

}

保存前合并:

dta <- c()
for(i in colnames(mtcars_df[2:7])){
tmp_df = mtcars_df[c(i,"mpg")]
i_resutl <- pcor(as.matrix(tmp_df), method = 'spearman')
dta <- rbind(dta,c(i,(unlist( i_resutl))))
}