创建要填充的矩阵而不指定其尺寸

时间:2019-02-22 08:26:21

标签: r loops matrix

我正在研究一种算法,在该算法中,我反复执行一个动作,并且在每次重复中,我都会获得一系列值(一个向量)。我想将此向量保留在矩阵中,例如作为一列,但是问题是我不知道算法会进行多少次迭代。据我所知,在R中必须指定矩阵的维数。 有解决办法的想法吗?

2 个答案:

答案 0 :(得分:1)

创建一个空列表。 在每次迭代中,列表中还有一个长度未知的元素。

res <- list()
unknown_iterations <- 10
for (k in 1:unknown_iterations){
  res[[length(res) + 1]] <- sample(1:k, k)
}
res
unlist(res)

然后,您可以将所需的形状应用于数据。

答案 1 :(得分:1)

知道向量长度时

这是一个解决方案,其中您可以创建一个尺寸已知的空矩阵def nested_str_to_float(value): """ Converts an string to float. Value may be a single value, a list or even a nested list. If value is a (nested) list, all values in the (nested) list are evaluated to floats wherever possible. Args: value: single value of any type or a list Returns: a copy of value with all float-convertible items converted to float """ # Test if value is a list, if so, recursively call nested_str_to_float if isinstance(value, list): return [nested_str_to_float(item) for item in value] # Try to convert to float; if possible, return float, else return value try: return float(value) except ValueError: return value (行数是矢量长度(M)和列数(lVector),您可以自己选择)。在nCols(矩阵已满时)之后,将其写入具有唯一标识符的光盘。

nCols

这将写入矩阵(# These parameters are known lVector <- 10 nCols <- 1e4 # Create matrix M <- matrix(nrow = lVector, ncol = nCols) iter <- 0 # This is unknown before nIterations <- 1e5 + 10 # Perform iterations for(i in seq_len(nIterations)) { iter <- iter + 1 # Perform simulation and write result to a matrix column M[, iter] <- sample(100, 10) if (iter == nCols) { # Write result to disc saveRDS(M, paste0("result_", i, ".RDS")) # Reset counter iter <- 0 # Create new empty matrix M <- matrix(nrow = lVector, ncol = nCols) } } # Write last 10 iterations to a disc (they didn't reach 1e4) saveRDS(M[, 1:iter], paste0("result_", i, ".RDS")) result_10000.RDS,...)


当向量长度未知时

您可以在此处创建一个长度为result_20000.RDS的空列表,并在lList迭代之后将其写入光盘并重新创建一个新列表。

lList