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 个变量,其中包含每个模型的误差估计 运行。如果您正在为每个模型寻找一个参数估计,您可以使用上述过程在全局环境中为单个估计分配一个唯一的名称,然后在循环完成后将它们绑定在一起
我正在尝试通过逐步添加每个变量来获得朴素贝叶斯 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 个变量,其中包含每个模型的误差估计 运行。如果您正在为每个模型寻找一个参数估计,您可以使用上述过程在全局环境中为单个估计分配一个唯一的名称,然后在循环完成后将它们绑定在一起