【发布时间】:2018-03-21 10:34:57
【问题描述】:
Given 是一个带有向量 x1 和 y1 的数据框:
x1 <- c(1,1,2,2,3,4)
y1 <- c(0,0,1,1,2,2)
df1 <- data.frame(x1,y1)
另外,我有一个数据框,其中包含向量 y1 的不同值和相应的概率:
y <- c(0,1,2)
p <- c(0.1,0.6,0.9)
df2 <- data.frame(y,p)
以下函数将给定概率 (p) 与随机数 (runif(1)) 进行比较。根据比较结果,df$x1 的值会发生变化并存储在 df$x2 中(对于 x1 的每个值,都必须抽取一个新的随机数):
example_function <- function(x,p){
if(runif(1) <= p) return(x + 1)
return(x)
}
set.seed(123)
df1$x2 <- unlist(lapply(df1$x1,example_function,0.5))
> df1$x2
[1] 2 1 3 2 3 5
这是我的问题:在上面的示例中,我为参数“p”(手动)选择了 0.5。相反,我想根据 df1 中与 x1 关联的 y1 的值从 df2 中选择概率 p。因此,我想要 p in
df1$x2 <- unlist(lapply(df1$x1,example_function,p))
从 df2 派生。
例如,df$x1[3],即 2,属于 df$y1[3],即 1。df2 表明,y 的 1 与 p = 0.6 相关联。在这种情况下,“example_function”中 df1$x1[3] 的参数 p 应该是 0.6。如何将这种对值 p 的查询集成到所描述的函数中?
【问题讨论】:
-
能否分享
df1$x2的所需输出? -
@Antonis,所需的输出是“example_function”中随机实验的结果。输出应该代表向量 x1 到 x2 的更新,其中 x1 到 x2 的变化是随机实验和给定概率的结果。
-
@C.F,关键是更多关于堆栈溢出的编码示例是通过提供示例数据和所需结果的示例来解决的,而不是通过描述来解决。此外,创建示例输出的行为加强了对需求的描述。如果存在随机性,设置种子使其可重现。
标签: r function arguments comparison matching