r语言 - 存储循环中的值



我正在模拟掷骰子,并希望将输出保存在单个对象中,但找不到这样做的方法。我试着看这里,这里,但他们似乎没有回答我的问题。

以下是我将 20 x 3 试验的结果分配给对象的尝试:

set.seed(1) 
Twenty = for(i in 1:20){   
trials = sample.int(6, 3, replace = TRUE)   
print(trials)   
i = i+1 
}
print(Twenty)

我不明白的是为什么运行后我无法回忆起该功能?

我还尝试在函数中使用return而不是print

Twenty = for(i in 1:20){
trials = sample.int(6, 3, replace = TRUE)
return(trials)
i = i+1
}
print(Twenty)

或者先创建一个空矩阵:

mat = matrix(0, nrow = 20, ncol = 3)
mat    
for(i in 1:20){
mat[i] = sample.int(6, 3, replace = TRUE)
print(mat)
i = i+1
}

但它们似乎更糟(因为我什至没有看到试验(。

感谢您的任何提示。

您的尝试有几点错误:

1(循环不是R中的函数或对象,因此将循环分配给变量是没有意义的

2(当你有一个循环for(i in 1:20)时,循环会递增i所以添加i = i + 1没有意义。

您上次正确实现的尝试如下所示:

mat <- matrix(0, nrow = 20, ncol = 3)
for(i in 1:20){
mat[i, ] = sample.int(6, 3, replace = TRUE)
}
print(mat)

我个人会简单地做

matrix(sample.int(6, 20 * 3, replace = TRUE), nrow = 20)

(由于所有抽奖都是独立的,并且有替换,所以你进行3次抽奖20次或只是60次抽奖都没有关系(

通常,在大多数编程语言中,不会将对象分配给for循环,因为它们不是正式的函数对象。使用循环在现有对象上进行迭代交互。但是,R 维护apply系列,该系列将迭代输出保存到与输入长度相同的对象。

考虑lapply(list apply(用于列表输出或sapply(simplized apply(用于矩阵输出:

# LIST OUTPUT
Twenty <- lapply(1:20, function(x) sample.int(6, 3, replace = TRUE))
# MATRIX OUTPUT
Twenty <- sapply(1:20, function(x) sample.int(6, 3, replace = TRUE))

要查看您的试用版,只需打印出对象即可

print(Twenty)

但是由于您从不使用迭代器变量,x,请考虑接收大小和表达式(无序列输入或函数(参数的replicate(包装器到sapply,通过一个参数可以输出矩阵或列表(:

# MATRIX OUTPUT (DEFAULT)
Twenty <- replicate(20, sample.int(6, 3, replace = TRUE))
# LIST OUTPUT
Twenty <- replicate(20, sample.int(6, 3, replace = TRUE), simplify = FALSE)

您可以使用列表:

Twenty=list()
for(i in 1:20){
Twenty[[i]] = sample.int(6, 3, replace = TRUE)
}

最新更新