Вот правильная версия вашей функции:
df.data <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv")
namearray <- as.character(levels(df.data$continent))
binarycoladd <- function(a1, a2) {
for (cn in a2) {
cname <- paste0("binary_", cn)
a1[cname] <- (a1$continent == cn)
}
return(a1)
}
binarycoladd(df.data, namearray)
(Не забудьте сохранить результат ... <- binarycoladd(...)
)
Вот версия, как я бы это сделал:
binarycols <- function(x) {
xlev <- levels(x)
M <- sapply(xlev, '==', x)
colnames(M) <- paste0("binary_", xlev)
return(M)
}
cbind(df.data, binarycols(df.data$continent))
КСТАТИ:
, если вы хотите использовать $continent
в регрессионной модели, логические фиктивные переменные внутренне генерируются функцией lm()
- поэтому нет необходимости генерировать их явно:
df.data <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv")
summary(lm(lifeExp ~ continent + year, data=df.data))