【发布时间】:2016-09-29 23:57:56
【问题描述】:
我有 20 名工人,每人执行 100 项任务。我已经为每个任务生成了真正的答案,这是 5 个答案中的 1 个
answers <- c("liver", "blood", "lung", "brain", "heart")
truth <- sample(answers, no.tasks, replace = TRUE, prob = c(0.2, 0.2, 0.2, 0.2, 0.2))
我的数据集包含列 workerID、taskID、truth。现在我需要生成另一个向量,我在其中模拟工人将根据特定概率回答的内容。例如,如果我对任务 1 的真值,工人 1 是“肝脏”,我希望工人 1 以高概率回答任务 1 的“肝脏”。同样,对于所有 2000 个任务的五个答案中的每一个,我都想要工人的答案。为此,我使用以下 for 和 if 循环。
for (i in nrow(dataSet)){
if (dataSet$truth[i] == "liver")
{
df <- (rep(sample(answers, no.tasks, prob = c(0.9, 0.02, 0.02, 0.02, 0.02), no.workers)))
} else if (dataSet$truth[i] == "blood")
{
df <- (rep(sample(answers, no.tasks, prob = c(0.02, 0.9, 0.02, 0.02, 0.02), no.workers)))
} else if (dataSet$truth[i] == "lung")
{
df <- (rep(sample(answers, no.tasks, prob = c(0.02, 0.02, 0.9, 0.02, 0.02), no.workers)))
} else if (dataSet$truth[i] == "brain")
{
df <- (rep(sample(answers, no.tasks, prob = c(0.02, 0.02, 0.02, 0.9, 0.02), no.workers)))
} else if (dataSet$truth[i] == "heart")
{
df <- (rep(sample(answers, no.tasks, prob = c(0.02, 0.02, 0.02, 0.02, 0.9), no.workers)))
} else {
df <- (rep(sample(answers, no.tasks, prob = c(0.2, 0.2, 0.2, 0.2, 0.2), no.workers)))
}
}
但是,由于我的任务 1 的真相是大脑,所以输出向量 df 有很多答案是“大脑”。有人可以提示这里出了什么问题吗?
【问题讨论】:
-
我还没有尝试运行你的代码,但是看着它,看起来你实际上并没有在每一轮存储你的结果,而是每次都覆盖
df。尝试在顶部添加一条语句df <- matrix(nrow = nrow(dataSet), ncol = no.tasks)并分配您的作业df[i, ] <- ... -
请显示预期输出。只有一个向量?每个任务每个答案一个向量?
-
@Parfait 是的,我只想要一个向量作为输出
-
在给定示例数据的情况下,该向量应该是什么样子?这有助于我们繁殖。
-
@Barker 我这样做了,但它给了我 NA 作为值:/.
标签: r loops if-statement for-loop probability