R 将数组算法包装到函数中的一个问题
我刚开始在R中编程。我正在编写在数组上执行操作的代码。当我把一个变量放在那里时,它就工作了,但是如果我把它包装成一个函数,那就有问题了。当我试图回忆列表矩阵[I]时,我得到了空值R 将数组算法包装到函数中的一个问题,r,R,我刚开始在R中编程。我正在编写在数组上执行操作的代码。当我把一个变量放在那里时,它就工作了,但是如果我把它包装成一个函数,那就有问题了。当我试图回忆列表矩阵[I]时,我得到了空值 F <- function(x){ list_matrices=c() for(i in 1:dim(x)[1]){ list_matrices[[i]] <- t(rbind(x[i,1:dim(x)[2],1:dim(x)[3]]))} } F在评论中已经指出,问题在于函数不返回list\u矩阵,因
F <- function(x){
list_matrices=c()
for(i in 1:dim(x)[1]){
list_matrices[[i]] <- t(rbind(x[i,1:dim(x)[2],1:dim(x)[3]]))}
}
F在评论中已经指出,问题在于函数不返回list\u矩阵
,因此这里我们将指出,存在一个问题,即您是否真的需要首先执行此操作。如果创建列表的原因是稍后使用某个函数g
对其进行迭代,则可以使用apply
直接在“x”上进行迭代。这两者是相同的:
# test inputs
x <- array(1:24, 2:4)
g <- function(x) sum(x*x)
# 1
f <- function(x) {
list_matrices <- c()
for(i in 1:dim(x)[1]) {
list_matrices[[i]] <- t(rbind(x[i,1:dim(x)[2],1:dim(x)[3]]))
}
list_matrices
}
L <- f(x)
sapply(L, g)
## [1] 2300 2600
# 2
apply(x, 1, g)
## [1] 2300 2600
#测试输入
我认为你必须把矩阵定义为列表而不是数组。。。类似于list\u matrix=[None]*10
。。。其中10
是所需的长度。可以尝试在函数末尾添加return(list\u matrix)
并调用list\u matrixlist\u matrix