Как создать цикл функции ppcor? - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь создать цикл для прохождения и выполнения корреляции (и в будущем частичной корреляции), используя функцию ppcor для переменных, хранящихся в кадре данных.Первая переменная (A) останется неизменной для всех корреляций, а вторая переменная (B) будет следующей переменной в следующем столбце в моем фрейме данных.У меня около 1000 переменных.

В качестве примера я приведу ниже приведенный ниже набор данных mtcars, так как он находится в том же формате, что и мои данные.

Мне удалось успешно завершить операцию, когда она выполнялась вручную с использованием cbind для связывания 2 столбцов (2 представляющие интерес переменные) перед запуском ppcor в массиве ("tmp_df").Затем я смог связать выходные данные операции корреляции («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")

}

Я ожидал, что цикл выведет дварезультатов корреляций в CSV-файл MyDataOutput. Но при этом появляется сообщение об ошибке, я думал, что я был в правильном месте?:

Ошибка: неожиданный символ в: "tmp_df = (cbind (i, mtcars_df $ mpg)"i "

Даже добавление фигурной скобки в конце не решает проблему, поэтому я пропустил это, поскольку появилось еще одно сообщение об ошибке '}'

1 Ответ

0 голосов
/ 16 февраля 2019

Я переделал часть вашего кода и исправил пропущенные ), }, ".Теперь 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))))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...