1

我已经远离 R 中的函数,但认为这是更好的做法。现在我有这个问题。我写我的功能:

 myFunction<-function(tab){ #takes tabular input
     inP<-c()
     for (x in 1:dim(tab)[1]){ #iterate over rows
         rname<-rownames(tab)[x] #rownames as output
         if(rname<5) inP<-c(inP,rname) #trivial work
     }
     return(inP) #return the vector made above
 }

 tablist<-as.list(paste("tab",1:4,sep=""))
 for (x in 1:length(tablist)){
     tablist[[x]]<-table(c(1:10),c(1:10))
 }

 inPvec<-c() #predefine vector to concatenate results into
 for (x in 1:length(tablist)){ #tabs holds multiple tables as a list
      myFunction(tablist[[x]]) #run myFunction for each table held in tabs
      inPvec<-c(inPvec,inP) #concatenate results from each iteration
 }

 inP
 #NULL

 myFunction(tablist[[1]])
 #[1] "1" "2" "3" "4" "10"

编辑为可行的例子:为懒惰道歉。

如果您在示例中运行循环,inP 将返回 NULL,inPvec 也是如此。在函数中运行单个表会返回正确的值。但是, inP 在调用它时为 NULL,所以我想这就是我的问题所在。

我希望循环遍历函数的所有内容都返回到单个向量,例如:

 inPVec
 #[1] "1" "2" "3" "4" "10" "1" "2" "3" "4" "10" "1" "2" "3" "4" "10" etc

非常感谢任何帮助。

4

1 回答 1

4

问题是您没有得到函数的结果:

inPvec<-c() #predefine vector to concatenate results into
for (x in tabs){ #tabs holds multiple tables as a list
     inPvec<-c(inPvec,myFunction(x)) #concatenate results from each iteration
}

你也应该更正你的功能:

myFunction<-function(tab){ #takes tabular input
    inP <- c()
    for (x in 1:dim(tab)[1]){ #iterate over rows
        rname<-rownames(tab)[x] #rownames as output
        if(rname=="something") inP<-c(inP,rname) #trivial work
    }
return(inP) #return the vector made above
}
于 2013-08-22T09:19:17.653 回答