r - R:在循环中迭代随机数
问题描述
我正在使用 R 编程语言。在上一个问题(R 语言:将循环的结果存储到表中)中,我学习了如何为变量“i”的固定值迭代循环:
#load libraries
library(caret)
library(rpart)
#generate data
a = rnorm(1000, 10, 10)
b = rnorm(1000, 10, 5)
c = rnorm(1000, 5, 10)
group <- sample( LETTERS[1:2], 1000, replace=TRUE, prob=c(0.5,0.5) )
group_1 <- 1:1000
#put data into a frame
d = data.frame(a,b,c, group, group_1)
d$group = as.factor(d$group)
#start the loop
e <- d
#here is the "i" variable
for (i in 400:405) {
d <- e
d$group_1 = as.integer(d$group_1 > i)
d$group_1 = as.factor(d$group_1)
trainIndex <- createDataPartition(d$group_1, p = .8,list = FALSE,times = 1)
training = d[ trainIndex,]
test <- d[-trainIndex,]
fitControl <- trainControl(## 10-fold CV
method = "repeatedcv",
number = 10,
## repeated ten times
repeats = 10)
TreeFit <- train(group_1 ~ ., data = training,
method = "rpart2",
trControl = fitControl)
pred = predict(TreeFit, test, type = "prob")
labels = as.factor(ifelse(pred[,2]>0.5, "1", "0"))
con = confusionMatrix(labels, test$group_1)
#update results into table
row = i - 399
final_table[row,1] = con$overall[1]
final_table[row,2] = i
}
#place results in table
final_table = matrix(1, nrow = 6, ncol=2)
现在,我正在尝试用随机数列表替换“i”: (i in sample(100:400, 10))
但是,这会返回以下错误(注意:我改为final_table = matrix(1, nrow = 6, ncol=2)
)final_table = matrix(1, nrow = 100, ncol=2)
:
Error in na.fail.default(list(group_1 = c(NA_integer_, NA_integer_, NA_integer_, :
missing values in object
有人可以告诉我我做错了什么吗?有没有更简单的方法可以将循环中的所有结果存储到矩阵(或表)中,而无需明确定义所需的行数?计算机可以自动为“i”的每个新值添加一个新行吗?
谢谢
解决方案
要使用随机数,您可以将代码更新为:
a = rnorm(1000, 10, 10)
b = rnorm(1000, 10, 5)
c = rnorm(1000, 5, 10)
group <- sample( LETTERS[1:2], 1000, replace=TRUE, prob=c(0.5,0.5) )
group_1 <- 1:1000
#put data into a frame
d = data.frame(a,b,c, group, group_1)
d$group = as.factor(d$group)
#start the loop
#place results in table
final_table = matrix(1, nrow = 10, ncol=2)
e <- d
#here is the "i" variable
vec <- sample(100:400, 10)
for (i in seq_along(vec)) {
d <- e
d$group_1 = as.integer(d$group_1 > vec[i])
d$group_1 = as.factor(d$group_1)
trainIndex <- createDataPartition(d$group_1, p = .8,list = FALSE,times = 1)
training = d[ trainIndex,]
test <- d[-trainIndex,]
fitControl <- trainControl(## 10-fold CV
method = "repeatedcv",
number = 10,
## repeated ten times
repeats = 10)
TreeFit <- train(group_1 ~ ., data = training,
method = "rpart2",
trControl = fitControl)
pred = predict(TreeFit, test, type = "prob")
labels = as.factor(ifelse(pred[,2]>0.5, "1", "0"))
con = confusionMatrix(labels, test$group_1)
#update results into table
final_table[i,1] = con$overall[1]
final_table[i,2] = vec[i]
}
推荐阅读
- android-studio - 安装颤振插件时,Android Studio 4.1 在索引时冻结
- php - 转移 Wordpress 网站后如何排查和修复数据库错误?
- java - 如何在不单击按钮的情况下将用户输入文本从 EditView 设置为 TextView
- xamarin.forms - 无法在 Xamarin 窗体中安装 NuGet 包
- c++ - C++编译器如何在继承中实现析构函数的反向调用顺序?
- python-3.x - 如何在数据框中按列分组并在循环中创建数据透视表
- android - 为 android 构建的 c++ 应用程序是否在内核上的 JVM 之上运行
- arrays - 在 c 中使用来自 valgrind 的大小为 8 的未初始化值
- c# - 使用 HttpClient PostAsync 发送 C# NameValueCollection 问题
- python - 为什么 Python 中并非所有 ram 内存都可用?