我回答了在Reddit AskScience上提出的问题,我发现了一些关于功能的奇怪的东西runif().我试图统一采样从1到52的集合.我的第一个想法是使用runif():
as.integer(runif(n, min = 1, max = 52))
Run Code Online (Sandbox Code Playgroud)
但是,我发现该操作从未产生52的值.例如:
length(unique(as.integer(runif(1000000, 1, 52))))
[1] 51
Run Code Online (Sandbox Code Playgroud)
为了我的目的,我转而sample()改为:
sample(52, n, replace = TRUE)
Run Code Online (Sandbox Code Playgroud)
在runif()文档中,它指出:
runif不会生成任何一个极值,除非max = min或max-min与min相比较小,特别是对于默认参数.
我想知道为什么runif()这样做.如果它试图统一生成样本,它似乎应该能够从集合中产生"极值".这是一个功能,为什么?
我正在尝试填充一组矩阵,其中矩阵(对象)名称保存在列表中。我可以使用 get() 返回具有给定名称的对象,但是当我使用 get() 定义要填充的矩阵对象时遇到了函数问题。
#Create list of matrix names:
list.names <- c("m.1")
#Create matrix object
m.1 <- matrix(nrow=2,ncol=2)
#Return matrix m.1 from the list.names using get(). Works great!
get(list.names[1])
#Populate m.1 with some values. Doesn't work.
get(list.names[1]) <- c(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)
所以在最后一行代码中,我收到一个错误:
找不到函数“get<-”
同样,我可以使用以下方法调用 m.1:
eval(as.name(list.name[1]))
Run Code Online (Sandbox Code Playgroud)
但是当我尝试填充矩阵时,R 返回类似的“找不到函数”错误。
有人可以在这里解释我的方法中的错误吗?
编辑/更新:
因此,在我试图简化在这里发布的问题时,我意识到我可能过于简化了我想要做的事情。
所以,事实上,我试图在一组矩阵中填充元素。矩阵的名称包含在 list.names 对象中。我使用嵌套的 for() 循环来填充矩阵中的每个元素。
所以,事实上,我的问题会更准确地表述为:
get(list.names[1])[1,1] <- some_value
Run Code Online (Sandbox Code Playgroud)
一些回复建议我根据我的原始帖子使用分配,但鉴于我试图在对象中而不是整个对象中“分配”一个元素,这种方法将不起作用。
对困惑感到抱歉。
r ×2