R - 如何使用循环以递增方式向数据集添加列?

时间:2016-01-26 12:34:47

标签: r loops dataframe naivebayes

我试图通过逐步添加每个变量来获取朴素贝叶斯分类器的错误率。例如,我的数据集中有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分类器,但这不是我的问题。我的问题是逐一添加列。到目前为止,我能做到的唯一方法是覆盖每一列。对于NB分类器,第一列是类节点,因此必须至少有两列才能运行。

#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中的数组不太熟悉。这会有用吗?

3 个答案:

答案 0 :(得分:1)

我认为这就是你想要的。

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

答案 1 :(得分:0)

定义triangles3d(d)变量

后,您可以使用decorate3d()功能
append

答案 2 :(得分:0)

使用&#34;分配&#34; while循环中的函数可以帮助解决这样的问题。您没有显示模型语法,但这样的事情应该有效:

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

...

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