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