我通过循环遍历它们来操纵R中的数组,例如:
arr <- array(runif(6), dim=c(2,3))
for (i in 1:2) {
for (j in 1:3) {
arr[i, j] <- arr[i, j] + 1
}
}
在我的应用程序中,我有许多维度,并且在内部循环中操作多个数组(操作比添加1更复杂)。为了使代码更具可读性,我想以某种方式将元组[i, j]
保存在一个对象中,比如idx
,然后重用idx
来访问数组。以下代码不起作用,但它最好地描述了我想在内循环中实现的内容:
idx <- c(i, j) # this is wrong
arr[idx] <- arr[idx] + 1
我应该把什么代替上面的c(i, j)
?请注意,我实际上处理的维度超过2个,例如[i, j, k, l, m, n]
。
答案 0 :(得分:1)
这有点棘手,但只要将数组和索引包装在一个列表中,然后将它们组合到一个更大的列表中,就可以使用do.call
。
arr <- array(1:8,dim=c(2,2,2))
idx <- list(1,1,1)
do.call("[",c(list(arr),idx))
[1] 1
do.call("[",c(list(arr),list(1,2,1)))
[1] 3