创建一个空的数据框:
data <- data.frame(ticks = numeric(0), identity = numeric(0), p_h = numeric(0), p_y = numeric(0), v_x = numeric(0), v_y = numeric(0), size = numeric(0), homo = numeric(0))
将数据添加到数据框:
while (x < timeStepsToRun)
{
.....
data[i, ] <- c(ag$ticks, ag$who, ag$xcor, ag$ycor, ag$v-x, ag$v-y,"10","1")
i=i+1;
...
}
我在添加数据时遇到以下错误:
Error in value[[jvseq[[jjj]]]] : subscript out of bounds
In addition: Warning message:
In matrix(value, n, p) : data length exceeds size of matrix
请建议更好的策略或帮助我纠正上述情况。 提前谢谢!
答案 0 :(得分:3)
如果你知道你需要data.frame有多大,预先指定大小,那么你不会遇到这些错误:
rows <- 1e4 # it's not clear how many you actually need from your example
data <- setNames(as.data.frame(matrix(nrow = rows, ncol = 8))
c('ticks', 'identity', 'p_h', 'p_y', 'v_x', 'v_y', 'size', 'homo'))
然后你可以用你描述的方式填写它。即使创建一个大于你需要的数据框并将其缩小到更大的数据框也比逐行增长更有效。
如果您知道要创建的列的类,它也可以提高性能以预先指定列类:
rows <- 1e4
data <- data.frame(ticks = integer(rows),
identity = character(rows),
p_h = numeric(rows),
p_y = numeric(rows),
v_x = numeric(rows),
v_y = numeric(rows),
size = numeric(rows),
homo = numeric(rows))
答案 1 :(得分:0)
我知道了:
data <- data.frame(ticks=NA, identity=NA, p_h=NA, p_y=NA, v_x=NA, v_y=NA,
size=NA, homo=NA)
timeStepstoRun <- 10
x <- #something
i <- 1
while (x < timeStepstoRun) {
data[i,] <- 1:8
i <- i + 1
}
只需将timeStepstoRun
,x
和data[x,] <- ...
替换为实际拥有的内容即可。这永远不会是做你想要做的事情的好方法,但我想我只是把它扔出去。