R - 如何使用循环将列增量添加到数据集?

R - How to add columns to a dataset incrementally using a loop?

我正在尝试通过逐步添加每个变量来获得朴素贝叶斯 classifier 的错误率。例如,我的数据集中有 25 个变量。我想在一次添加一个变量时获得模型的错误率。所以你知道它会输出模型前 2 列的错误率,前 3 列的错误率,然后是前 4 列,依此类推直到最后一列。

这是我想要实现的伪代码

START
IMPORT DATASET WITH ALL VARIABLES

num_variables = num_dataset_cols
i= 1

WHILE (i <= num_variables)
{
   CREATE NEW DATASET WITH x COLUMNs

   BUILD THE MODEL 
   GET THE ERROR RATE

   ADD IN NEXT COLUMN

   i = i + 1
}

这是一个可重现的问题。显然你不能用这些数据构建一个 NB classifier,但这不是我的问题。我的问题是在列中一一添加。到目前为止,我能做到的唯一方法是覆盖每一列。对于 NB classifier,第一列是 class 节点,因此必须至少有 2 列开始才能使其成为 运行.

#REPRODUCIBLE EXAMPLE
col1 <- c("A", "B", "C", "D", "E")
col2 <- c(1,2,3,4,5)
col3 <- c(TRUE, FALSE, FALSE, TRUE, FALSE)
col4 <- c("n","y","y","n","y")
col5 <- c("10", "15", "50", "100", "20")

dataset <- data.frame(col1, col2, col3, col4,col5)

num_variables <- ncol(dataset)

i <- 1

while i <= num_variables 
{
data <- dataset[c(1, i+1)]
str(data)

#BUILD MODEL AND GET VALIDATION ERROR

#INCREMENT i TO GET NEXT COLUMN
i <- i + 1

}

str(data)应该可以看出,每次该列都被覆盖了。有谁知道我如何在不覆盖前一列的情况下添加每一列?有人向我推荐了一个数组,但我对 R 中的数组不太熟悉。这行得通吗?

定义output变量后可以使用append函数

data <- dataset[c(1, i+1)]
append(output, data)
str(data)

我想这就是你想要的。

col1 <- c("A", "B", "C", "D", "E")
col2 <- c(1,2,3,4,5)
col3 <- c(TRUE, FALSE, FALSE, TRUE, FALSE)
col4 <- c("n","y","y","n","y")
col5 <- c("10", "15", "50", "100", "20")

dataset <- data.frame(col1, col2, col3, col4,col5)
dataset

num_variables <- ncol(dataset)
num_variables
i <- 1

while (i <= num_variables) {

data <- dataset[, 1:i]

print(str(data))

#BUILD MODEL AND GET VALIDATION ERROR

#INCREMENT i TO GET NEXT COLUMN
i <- i + 1

}

Factor w/ 5 levels "A","B","C","D",..: 1 2 3 4 5
NULL
'data.frame':   5 obs. of  2 variables:
 $ col1: Factor w/ 5 levels "A","B","C","D",..: 1 2 3 4 5
 $ col2: num  1 2 3 4 5
NULL
'data.frame':   5 obs. of  3 variables:
 $ col1: Factor w/ 5 levels "A","B","C","D",..: 1 2 3 4 5
 $ col2: num  1 2 3 4 5
 $ col3: logi  TRUE FALSE FALSE TRUE FALSE
NULL
'data.frame':   5 obs. of  4 variables:
 $ col1: Factor w/ 5 levels "A","B","C","D",..: 1 2 3 4 5
 $ col2: num  1 2 3 4 5
 $ col3: logi  TRUE FALSE FALSE TRUE FALSE
 $ col4: Factor w/ 2 levels "n","y": 1 2 2 1 2
NULL
'data.frame':   5 obs. of  5 variables:
 $ col1: Factor w/ 5 levels "A","B","C","D",..: 1 2 3 4 5
 $ col2: num  1 2 3 4 5
 $ col3: logi  TRUE FALSE FALSE TRUE FALSE
 $ col4: Factor w/ 2 levels "n","y": 1 2 2 1 2
 $ col5: Factor w/ 5 levels "10","100","15",..: 1 3 5 2 4
NULL

在 while 循环中使用 "assign" 函数可以帮助解决此类问题。您没有显示模型语法,但像这样的东西应该可以工作:

dataset$errorrate <- [whatever makes this calculation, assuming it is vectorized]
name <- paste0(errorrate, i)
assign(name, dataset$errorrate)

...

这应该为您留下 i 个变量,其中包含每个模型的误差估计 运行。如果您正在为每个模型寻找一个参数估计,您可以使用上述过程在全局环境中为单个估计分配一个唯一的名称,然后在循环完成后将它们绑定在一起