有什么方法可以使用重复循环的最后一个值来制作数据框吗?
Is there any way to make a data frame using the last values of a repeated loop?
我想仅使用 Repeat 循环中的最后计算值来制作数据框。
对于 repeat 和 sample 函数,我使用的是这些数据。 Prob 列中的数字是每个数字出现的概率。
enter image description here
b <- 1
repeat {
c <- sample(a$Plus, size=1, prob=(a$Prob))
cat(b, '\t', c, '\n')
b <- b + 1
if (c >= 10) {
{
break
}
}
}
#I'm interested in the result greater than 10 only
如果我运行上面的代码,那么它会计算类似
的东西
1 4
2 8
3 13
如果我再次运行这个,它会计算出不同的结果,比如..
1 9
2 3
3 7
4 3
5 11
我想做的是仅使用每个循环的最后输出来制作数据框。
例如,使用上面的计算数据,我想制作一个看起来像
的框架
Trial Result
3 13
5 11
有什么方法可以按我想要的次数重复这个循环,并只使用每个重复函数的最后输出来制作数据框吗?
您可以使用用户定义的函数来执行此操作。由于您还没有提供数据框 a
,我将其定义如下:
library(tidyverse)
a <- tibble(
Plus = 1:15,
Prob = seq(from = 15, to = 1, by = -1)
)
以下函数与您的 repeat 循环执行相同的操作,但将相关结果存储在 tibble 中。我已将您的变量 b
排除在外,因为据我所知,它对您想要的输出没有帮助。
samplefun <- function(a) {
c <- sample(a$Plus, size=length(a$Plus), prob=a$Prob)
res <- tibble(
Trial = which(c >= 10)[1],
Result = c[which(c >= 10)[1]]
)
return(res)
}
然后使用 map_dfr
到 return 任意数量的样本:
nsamples <- 5
map_dfr(1:nsamples, ~ samplefun(a))
输出:
# A tibble: 5 x 2
Trial Result
<int> <int>
1 4 11
2 6 14
3 5 11
4 2 10
5 4 15
我想仅使用 Repeat 循环中的最后计算值来制作数据框。 对于 repeat 和 sample 函数,我使用的是这些数据。 Prob 列中的数字是每个数字出现的概率。 enter image description here
b <- 1
repeat {
c <- sample(a$Plus, size=1, prob=(a$Prob))
cat(b, '\t', c, '\n')
b <- b + 1
if (c >= 10) {
{
break
}
}
}
#I'm interested in the result greater than 10 only
如果我运行上面的代码,那么它会计算类似
的东西1 4
2 8
3 13
如果我再次运行这个,它会计算出不同的结果,比如..
1 9
2 3
3 7
4 3
5 11
我想做的是仅使用每个循环的最后输出来制作数据框。 例如,使用上面的计算数据,我想制作一个看起来像
的框架Trial Result
3 13
5 11
有什么方法可以按我想要的次数重复这个循环,并只使用每个重复函数的最后输出来制作数据框吗?
您可以使用用户定义的函数来执行此操作。由于您还没有提供数据框 a
,我将其定义如下:
library(tidyverse)
a <- tibble(
Plus = 1:15,
Prob = seq(from = 15, to = 1, by = -1)
)
以下函数与您的 repeat 循环执行相同的操作,但将相关结果存储在 tibble 中。我已将您的变量 b
排除在外,因为据我所知,它对您想要的输出没有帮助。
samplefun <- function(a) {
c <- sample(a$Plus, size=length(a$Plus), prob=a$Prob)
res <- tibble(
Trial = which(c >= 10)[1],
Result = c[which(c >= 10)[1]]
)
return(res)
}
然后使用 map_dfr
到 return 任意数量的样本:
nsamples <- 5
map_dfr(1:nsamples, ~ samplefun(a))
输出:
# A tibble: 5 x 2
Trial Result
<int> <int>
1 4 11
2 6 14
3 5 11
4 2 10
5 4 15