给定是具有向量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
这是我的问题:在上面的示例中,我为参数选择了0.5&#34; p&#34; (手动地)。相反,我想根据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相关联。在这种情况下,&#34; example_function&#34;中的df1 $ x1 [3]的参数p应该是0.6。如何将值p的这种查询集成到所描述的函数中?
答案 0 :(得分:1)
这里没有必要做任何复杂的事情。你可以使用vector-expressions获得你想要的东西。
要选择p
和y1
给出的概率,只需下标:
> p[y1]
[1] 0.1 0.1 0.6 0.6
然后从x2
选择您的x1
,并选择以下示例:
> ifelse(runif(1) <= p[y1], x1, x1 + 2)
[1] 3 4 3 4
答案 1 :(得分:1)
df1$x2 <- unlist(lapply(df1$x1,
function(z) {
example_function(z, df2$p[df2$y == df1$y1[df1$x1 == z][1])
}))
df1
# x1 y1 x2
# 1 1 0 1
# 2 2 0 2
# 3 3 1 4
# 4 4 1 4
# 5 5 2 6
# 6 6 2 7
答案 2 :(得分:0)
解决问题的一种方法是使用&#34; merge&#34;和&#34; mapply&#34;而不是&#34; lapply&#34;:
MyService myServiceMock = Mockito.mock(MyService.class);
Application application = (Application) ShadowApplication.getInstance().getApplicationContext();
ShadowContextImpl shadowContext = (ShadowContextImpl) Shadows.shadowOf(application.getBaseContext());
shadowContext.setSystemService(Context.MY_SERVICE, myServiceMock);