Как хранить значения из цикла в dataframe в R?

dict2 = dict1 не копирует словарь. Это просто дает программисту второй способ (dict2) ссылаться на тот же словарь.

0
задан biruk1230 16 January 2019 в 19:58
поделиться

2 ответа

Рассмотрим Map для построения списка фреймов данных из каждой пары ker и cValues ​​ (1:100), сгенерированных из expand.grid, и строки связывают все элементы вместе.

k_c_pairs_df <- expand.grid(kerna=kerna, c_value=1:100, stringsAsFactors = FALSE)

model_fct <- function(ker, c) {
      model <- ksvm(V11~V1+V2+V3+V4+V5+V6+V7+V8+V9+V10,
                    data = credit_card_data,
                    type ="C-svc",
                    kernel = ker,
                    C=c,
                    scaled =TRUE)

      pred <- predict(model,credit_card_data[,1:10])
      accuracy <- sum(pred== credit_card_data$V11)/nrow(credit_card_data)

      print(paste("kernal:",ker, "c=",cValues[i],"accuracy=",accuracyValues[i]))

      return(data.frame(kernel = ker, cValues = c, accuracyValues = accuracy))
}

df_list <- Map(model_fct, k_c_pairs_df$ker, k_c_pairs_df$c_value)

final_df <- do.call(rbind, df_list)
0
ответ дан Parfait 16 January 2019 в 19:58
поделиться

Начиная с базового кода, настройте структуру кадра выходных данных. Затем выполните цикл и введите значения точности на каждой итерации. Этот метод также «выравнивает» вложенный цикл и избавляет от вашей переменной c, которая конфликтует со встроенной функцией c().

kerna <- c("rbfdot","polydot","vanilladot","tanhdot","laplacedot",
           "besseldot","anovadot","splinedot")

# Create dataframe to store output data
df <- data.frame(kerna = rep(kerna, each = 100), 
                 cValues = rep(1:100, times = length(kerna)),
                 accuracyValues = NA,
                 stringsAsFactors = F)

# Define a for loop to calculate accuracy for different values of C and kernel
for (i in 1:nrow(df)){
  ker <- df$kerna[i]
  j <- df$cValues[i]
  model <- ksvm(V11~V1+V2+V3+V4+V5+V6+V7+V8+V9+V10,
                data = credit_card_data,
                type ="C-svc",
                kernel = ker,
                C=j,
                scaled =TRUE)
  pred <- predict(model,credit_card_data[,1:10])
  accuracy <- sum(pred== credit_card_data$V11)/nrow(credit_card_data)

  # Insert accuracy into df$accuracyValues
  df$accuracyValues[i] <- accuracy;
}
0
ответ дан Ben Fasoli 16 January 2019 в 19:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: