gpt4 book ai didi

r - 使用非序列向量作为循环的输入

转载 作者:行者123 更新时间:2023-12-04 11:22:14 24 4
gpt4 key购买 nike

我在 R 中的循环函数遇到了一些问题,在这个网站上找不到这个问题的答案。我想使用数字向量作为 R 中循环的输入。

例如:

ns <- c(10, 20, 40, 80, 160)

for (n in ns) {
ni[n] <- round(rnorm(1, mean = n, sd = 1))
}

此代码的结果是一个向量,该向量具有 155 倍 NA 和此向量中的五个正确值。但是,我想摆脱所有这些 NA 并获得一个只有五个正确值的向量。我知道如何从 155 NA 的向量中选择正确的值,但我更喜欢在运行循环后直接获得正确的向量。

先感谢您!

最佳答案

请记住,R 中的许多函数都是矢量化的

> rnorm(length(ns), mean=ns)
[1] 9.905652 19.721717 40.462751 78.982971 160.770257

(在您的问题中, ni[n] 创建一个向量,只要最大值为 n ,即 160 个元素)。

看到这从 sapply 演变而来很有趣。 @VictorK 提供的解决方案。
sapply(ns, function(n) round(rnorm(1, mean = n, sd = 1)))

排除 round并删除默认参数 sd = 1 , 所以
round(sapply(ns, function(n) rnorm(1, mean = n)))

然后认识到 rnorm可以代替匿名函数 function(n) ...如果我们将其命名为 sapply 中的第一个参数称呼。 rnorm的第一个参数被命名 n ,所以事情有点困惑;但我们正在强制 ns 的元素匹配第二个参数 mean .例如,我们第一次通过 sapply 评估 rnorm(ns[[1]], n=1) . R 首先按名称匹配参数,因此 n=1 匹配 rnorm 的第一个参数,然后按在剩余参数中的位置,所以未命名参数 ns[[1]]匹配下一个可用参数, mean )
round(sapply(ns, rnorm, n = 1))

然后也许我们会看到完全矢量化的解决方案
round(rnorm(n = length(ns), mean = ns))

关于r - 使用非序列向量作为循环的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14592383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com