【发布时间】: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) 似乎是错误的,因为逗号
【问题讨论】:
假设我有两个整数,它们是 (x, y)。如何将 (x, y) 的值分配给 rpois(2,100)?我需要这样做,因为我需要一直随机更改 (x, y) 的值来测试我的函数是否正确。我尝试使用:
=function(x, y) {
(x, y)=rpois(2,100)
return(x, y)
}
但是,(x, y) 似乎是错误的,因为逗号
【问题讨论】:
根据您对 Mossa 回答的评论,这应该得到您想要的结果:
mult <- with(as.list(xy <- setNames(rpois(2, 100), c("x", "y"))), LCM(x, y))
运行此命令将在您的环境中生成两个对象:xy 将是一个长度为 2 的整数向量,名称为“x”和“y”。 mult 是 LCM 函数的输出,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 对 x、y:
xy <- matrix(rpois(200, 100), ncol = 2)
mult <- LCM(xy[,1], xy[,2])
现在xy 是一个 100 x 2 矩阵,其中每一行是 x、y 对,mult 是 LCM。如果 LCM 被矢量化,这将起作用。如果没有向量化,只需在运行上面两行代码之前调用Vectorize(LCM)即可。
【讨论】:
我假设您想要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 <- xy[1] 和 y <- 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)]
【讨论】: