2016-11-16 6 views
0

У меня есть dataframe следующим образом:несовместимых размеров при использовании lapply (COR (X, 1: длина (х))

a <- c(1,45,5,23,78,NA,NA) 
b <- c(1,4,5,NA,NA,NA,NA) 
c <- c(4,NA,NA,NA,NA,NA,NA) 
d <- c(4,6,7,3,4,23,4) 

df <- data.frame(a,b,c,d) 

Теперь я хотел бы получить вектор с коэффициентами корреляции каждого вектора с его собственная длина опускаю NAs

. Например: cor(df$a[!is.na(df$a)], 1:length(df$a[!is.na(df$a)])), который возвращает мне линейный коэффициент корреляции (1,45,5,23,78) с (1,2,3,4,5)

Когда я применяю вышеуказанный письменный код к одному столбцу, он работает. Однако, когда я включаю функцию в функцию lapply, чтобы получить ее для всех столбцов, я получаю «несовместимые размеры». Я понимаю, что ошибка несовместимых размеров указывает на то, что разные векторные размеры коррелированы. Однако как это возможно, когда я сопоставляю вектор с его длиной ...?

result <- lapply(df, function(x){ o <-cor(x[!is.na(x)], 1:length(x[!is.na(x)]))}) 

Я также попытался, что также вернуло мне ту же ошибку.

result <- lapply(df, function(x) {o <-cor(c(x[!is.na(x)]),c(1:length(x[!is.na(x)])))}) 
+1

Это потому, что 'cor (4, 1)' не определен? –

+3

Я не могу воспроизвести вашу ошибку, заявления в порядке, похоже, работают нормально. – Shape

+0

Хорошо работает для меня, но для столбца c, который дает NA (и это нормально, потому что есть только одно наблюдение). Кстати, вам не нужно «o <-» в вашей привязке в вашем приложении) – Bastien

ответ

1

у вас попробовать:

apply(df, 2, cor, y=1:nrow(df),use="complete.obs") 

Это более элегантный способ кодирования вашей функции. Это может сработать и для вас.

+1

Более безопасный файл sapply (df, cor, y = 1: nrow (df), use = "complete.obs") ' –