Как с этим справиться?
Два способа:
- Подать данные в
cor()
, как функция ожидает от вас:
data(Titanic)
Titanic <- data.frame(Titanic)
cor(Titanic$Sex, Titanic$Freq) # Bad, Titanic$Sex is a factor, not numeric
# Error in cor(Titanic$Sex, Titanic$Freq) : 'x' must be numeric
cor(as.numeric(Titanic$Sex), Titanic$Freq) # Good, cor() expects numeric
# [1] -0.294397
Если вы не хотите вводить as.numeric
, вы можете просто использовать c()
:
cor(c(Titanic$Sex), Titanic$Freq)
# [1] -0.294397
Если вы не хотите делать это все время, вы можете просто сделать свой собственный
cor()
, чтобы сделать это за вас:
cor <- function(x, y, ...) {
if ( !is.numeric(x) ) {
message("Converting x to numeric.")
x <- as.numeric(x)
}
if ( !is.numeric(y) ) {
message("Converting y to numeric.")
y <- as.numeric(y)
}
return(stats::cor(x, y, ...))
}
data(Titanic)
Titanic <- data.frame(Titanic)
cor(Titanic$Sex, Titanic$Freq)
# Converting x to numeric.
# [1] -0.294397
Почему не Rделать такие вещи, как SPSS?
- Это другое программное обеспечение.Возможно, вы в течение некоторого времени строили определенные предположения или ожидания, работая с одним конкретным программным обеспечением, но вы должны потерять ожидание того, что другое программное обеспечение, или , будет работать так же.
- Путь R может быть более подходящим.Некоторое обсуждение можно найти в комментарии PoGibas , а также о перекрестной проверке здесь .