Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将数组算法包装到函数中的一个问题_R - Fatal编程技术网

R 将数组算法包装到函数中的一个问题

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矩阵,因

我刚开始在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矩阵
,因此这里我们将指出,存在一个问题,即您是否真的需要首先执行此操作。如果创建列表的原因是稍后使用某个函数
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 matrix
list\u matrix