遍历 for 循环 R 中的两个向量

Iterating through two vectors in a for loop R

提问人:edge selcuk 提问时间:10/31/2022 更新时间:10/31/2022 访问量:57

问:

我想创建一个 for 循环,它在其中计算 和 的标准偏差。它将显示它将计算的向量的名称,然后打印它的值。我如何才能使下面的代码工作?vectAvectBstd()std

vectA <- c(1,6,7)
vectB <- c(8,9,11)
names <- c('A', 'B')
vects <- c(vectA,vectB)
for (i in seq_along(scale_vars)) {
     print("Calculating for", names[i])
     std(vects[i])
}
R for 循环 数学 向量 STD

评论

0赞 neilfws 10/31/2022
您的代码不会打印 的输出。但这个功能是什么?它不在 R base 中。std()
0赞 dcarlson 10/31/2022
您是否收到任何错误消息?您应该运行代码并在问题中包含错误消息。在您发布的代码中,未定义。您的代码创建一个包含 6 个值的向量。该对象是字符名称的向量,它不提供访问 中的值的方法。scale_varsvects <- c(vectA,vectB)namesvectA

答:

1赞 Martin Wettstein 10/31/2022 #1

如果使用 连接向量,它们会形成一个长向量。在您的情况下,vects 的长度为 6,并且只是 .您必须使用列表来创建向量集合,您可以在其中按索引调用它们。此外,标准差的函数是,您不能使用相同的 print 语句打印两个字符。你首先需要他们。并且是保留的。c()c(1,6,7,8,9,10)sd()paste()names

试试这个:

vectA <- c(1,6,7)
vectB <- c(8,9,11)
vnames <- c('A', 'B')
vects <- list(vectA,vectB)
for (i in 1:2) {
  print(paste("Calculating for", vnames[i]))
  print(sd(vects[[i]]))
}

您还可以通过命名列表中的向量来简化它:

vectA <- c(1,6,7)
vectB <- c(8,9,11)
vects <- list("A"=vectA,"B"=vectB)
for (i in names(vects)) {
  print(paste("Calculating for", i))
  print(sd(vects[[i]]))
}