【问题标题】:Assigning random values to a pair of integers using rpois(2,100)使用 rpois(2,100) 将随机值分配给一对整数
【发布时间】:2021-12-10 05:17:06
【问题描述】:

假设我有两个整数,它们是 (x, y)。如何将 (x, y) 的值分配给 rpois(2,100)?我需要这样做,因为我需要一直随机更改 (x, y) 的值来测试我的函数是否正确。我尝试使用:

=function(x, y) {
(x, y)=rpois(2,100)
return(x, y)
} 

但是,(x, y) 似乎是错误的,因为逗号

【问题讨论】:

    标签: r random integer poisson


    【解决方案1】:

    根据您对 Mossa 回答的评论,这应该得到您想要的结果:

    mult <- with(as.list(xy <- setNames(rpois(2, 100), c("x", "y"))), LCM(x, y))
    

    运行此命令将在您的环境中生成两个对象:xy 将是一个长度为 2 的整数向量,名称为“x”和“y”。 multLCM 函数的输出,xy 的值作为参数传递。

    或者,您可以这样做:

    xy <- rpois(2, 100)
    x <- xy[1]
    y <- xy[2]
    mult <- LCM(x, y)
    

    xy <- rpois(2, 100)
    mult <- LCM(xy[1], xy[2])
    

    其中任何一个都可能是更具可读性的代码。

    更新回应评论:

    xy 是您的 x 和 y,在您调用 LCM 后可用。使用 pracma 包中的 Lcm 函数演示:

    library(pracma)
    
    > mult <- with(as.list(xy <- setNames(rpois(2, 100), c("x", "y"))), Lcm(x, y))
    > print(paste("LCM of", xy[1], "and", xy[2], "is", mult))
    [1] "LCM of 95 and 91 is 8645"
    > mult <- with(as.list(xy <- setNames(rpois(2, 100), c("x", "y"))), Lcm(x, y))
    > print(paste("LCM of", xy[1], "and", xy[2], "is", mult))
    [1] "LCM of 103 and 102 is 10506"
    > mult <- with(as.list(xy <- setNames(rpois(2, 100), c("x", "y"))), Lcm(x, y))
    > print(paste("LCM of", xy[1], "and", xy[2], "is", mult))
    [1] "LCM of 104 and 109 is 11336"
    

    如果您尝试测试LCM,则可能最容易执行以下操作,因为rpois 的结果不相关。假设你想测试 100 对 xy

    xy <- matrix(rpois(200, 100), ncol = 2)
    mult <- LCM(xy[,1], xy[,2])
    

    现在xy 是一个 100 x 2 矩阵,其中每一行是 xy 对,mult 是 LCM。如果 LCM 被矢量化,这将起作用。如果没有向量化,只需在运行上面两行代码之前调用Vectorize(LCM)即可。

    【讨论】:

    • 我认为这是正确的答案。赞成。
    • 您好,非常感谢您的帮助。真的很感激,但我只有一个问题。它总是给我与 LCM 相同的价值。为什么每次我运行 mult
    • @user17233361 查看更新后的答案。这有帮助吗?
    • 好的,谢谢,这很有效。
    【解决方案2】:

    我假设您想要x ~ Pois(2)y ~ Pois(100)。 这意味着你实际上想要

    > xy <- rpois(n = 2, lambda = c(2, 100))
    > xy
    [1]   4 119
    

    所以现在,如果你这样做 rpois(n = 100, lambda = c(2, 100)) 那么这些条目的一半 将与Pois(2) 和另一半Pois(100) 一起,交替输入结果数字。

    然后您可以分配:x &lt;- xy[1]y &lt;- xy[2]。 尽管 {zealot} 包试图提供这样的功能,但 R 中没有“元组分配”。

    附录

    为了完成:请注意,您可以使用模式索引来访问交替值:

    xy_n <- rpois(n = 2 * 100, lambda = c(2, 100))
    x <- xy_n[c(TRUE, FALSE)]
    y <- xy_n[c(FALSE, TRUE)]
    

    【讨论】:

    • 嗨,我相信你误解了我想要的,但这可能是由于我对问题的措辞不佳以及我可怕的代码毫无意义。好吧,让我给你背景故事。我做了一个函数来找到两个正整数的最小公倍数。这两个正整数标记为 (x,y)。但是,我需要找到一种方法将 rpois(2,100) 的值分配给 x 和 y。这是因为我需要为我的正整数 (x,y) 生成随机值,并且问题说必须使用 rpois(2,100) 来完成。那么如何在 LCM=function(x,y){....} 中输入 x,y 的值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多