R中的For循环用于建模

R中的For循环用于建模,r,R,我正在尝试运行一个rpart树模型,在这个模型中,我的硬件问题表明我必须为不同的cp值迭代该模型。我想为相同的值创建一个for循环。 例如,cp范围从0.01到0.10,我想做一个循环/或使用apply族函数来获得10个名为tree_mod1、tree_mod2等的模型。 有人能帮我怎么做吗?我是R的新手,在网上找不到我想要的答案。谢谢。您可以创建一个cp值列表,并使用Lappy对其进行迭代: cp <- list(cp1 = the_first_cp, cp2 =

我正在尝试运行一个rpart树模型,在这个模型中,我的硬件问题表明我必须为不同的cp值迭代该模型。我想为相同的值创建一个for循环。 例如,cp范围从0.01到0.10,我想做一个循环/或使用apply族函数来获得10个名为tree_mod1、tree_mod2等的模型。
有人能帮我怎么做吗?我是R的新手,在网上找不到我想要的答案。谢谢。

您可以创建一个cp值列表,并使用Lappy对其进行迭代:

cp <- list(cp1 = the_first_cp, 
           cp2 = the_second_cp)
model_list <- lapply(cp, function(x) rpart(rpart arguments, cp = x))
names(model_list) <- names(cp)

cp您可以创建一个cp值列表,并使用lappy对其进行迭代:

cp <- list(cp1 = the_first_cp, 
           cp2 = the_second_cp)
model_list <- lapply(cp, function(x) rpart(rpart arguments, cp = x))
names(model_list) <- names(cp)
cp除了完整的好答案之外,如果你包含一段你自己尝试过的代码,那么你获得好答案的机会就会大大增加

在这种情况下,有相当多的包来创建基于树的模型
rpart
通常是速度较快的一种,但我们不知道您被要求使用哪一种

显然,您可以手动执行此操作

library(rpart)
data(kyphosis, package = "rpart")
tree_mods <- list()
form <- Kyphosis ~ Age + Number + Start
tree_mods[["treemod1"]] <- rpart(form, data = kyphosis, cp = 0.01)
tree_mods[["treemod1"]] <- rpart(form, data = kyphosis, cp = 0.02)
...
因为这是一个家庭作业,你应该能够改变循环,以满足你的需要,作为作业的一部分

编辑:应用和for循环的时间差 从评论中可以看出,在R中应用
*是否比
for loops
更快。这是一个常见的神话,在几年前的一次更新之前,R中改进了
for loops
的性能。下面我添加了一个小说明计算列means。(注意。不要像我在示例中所做的那样。使用
colMeans
。这只是为了说明)

n除了完整的好答案之外,如果你包含一段你自己尝试过的代码,那么你得到好答案的机会就会大大增加

在这种情况下,有相当多的包来创建基于树的模型
rpart
通常是速度较快的一种,但我们不知道您被要求使用哪一种

显然,您可以手动执行此操作

library(rpart)
data(kyphosis, package = "rpart")
tree_mods <- list()
form <- Kyphosis ~ Age + Number + Start
tree_mods[["treemod1"]] <- rpart(form, data = kyphosis, cp = 0.01)
tree_mods[["treemod1"]] <- rpart(form, data = kyphosis, cp = 0.02)
...
因为这是一个家庭作业,你应该能够改变循环,以满足你的需要,作为作业的一部分

编辑:应用和for循环的时间差 从评论中可以看出,在R中应用
*是否比
for loops
更快。这是一个常见的神话,在几年前的一次更新之前,R中改进了
for loops
的性能。下面我添加了一个小说明计算列means。(注意。不要像我在示例中所做的那样。使用
colMeans
。这只是为了说明)


n嘿,非常感谢您的解决方案!这很有帮助。我还需要用不同的名称保存每个模型。你知道我该怎么做吗?如果你的原始CP列表被命名,你可以在你的模型列表中使用相同的(或修改过的)名称。我已经编辑了我的答案来反映这一点。嘿,非常感谢你的解决方案!这很有帮助。我还需要用不同的名称保存每个模型。你知道我该怎么做吗?如果你的原始CP列表被命名,你可以在你的模型列表中使用相同的(或修改过的)名称。我编辑了我的答案来反映这一点。关于“For循环速度稍快,但可读性往往较低”,不是吗?过去是这样,如果你搜索互联网,最热门的往往是引用,这些引用会告诉你这是事实。但事实并非如此。一次更新(相信早在2015年或更久远的时候)改变了R中循环的
,它们得到了极大的改进。基本上,
apply
将在内部创建一个
for循环
,并为您运行该函数(不精确,但足够接近)。为循环
创建
所需的时间是开销,这将使其速度稍慢。额外的格式化在最后完成,增加了一点开销。循环越长,差异就越小。我在答案中添加了一个小示例(稍后),我将时间差作为一个小示例。关于“for循环速度稍快,但可读性通常较低”,不是吗?过去是这样,如果你在互联网上搜索,最热门的往往是那些事实上会告诉你这一点的参考资料。但事实并非如此。一次更新(相信早在2015年或更久远的时候)改变了R中循环的
,它们得到了极大的改进。基本上,
apply
将在内部创建一个
for循环
,并为您运行该函数(不精确,但足够接近)。为循环
创建
所需的时间是开销,这将使其速度稍慢。额外的格式化在最后完成,增加了一点开销。循环越长,差异越小。我在答案中添加了一个小示例(稍后),我将时间差异作为一个小示例。