首页 > 解决方案 > 在 R 中构建函数后,Return() 不工作,而 Print() 不工作

问题描述

我正在使用 R 中的面板数据,并正在努力构建一个函数来返回 PCA==1 的每个用户 ID。我在很大程度上得到了这个工作,有一个小问题:它只在我用 print() 结束函数时返回值,但当我用 return() 结束函数时不这样做。因为我想要向量中的 ID,所以我可以稍后将数据子集以仅包含这些 ID,这是一个问题。下面反映的代码 - 任何人都可以就我做错了什么提出建议吗?

有效的版本(但不符合我的要求):

retrievePCA<-function(data) {
  for (i in 1:dim(data)[1]) {
  if (data$PCA[i] == 1) {
    id<-data$CPSIDP[i]
    print(id)
  } 
  }
}

retrievePCA(data)

没有的版本:

retrievePCA<-function(data) {
  for (i in 1:dim(data)[1]) {
  if (data$PCA[i] == 1) {
    id<-data$CPSIDP[i]
    return(id)
  } 
  }
}


vector<-retrievePCA(data)
vector

标签: rfunction

解决方案


您的问题是对函数和从函数返回的功能的简单误解。

以下面的小例子为例

f <- function(x){
  x <- x * x
  return x
  x <- x * x
  return x
}
f(2)
[1] 4

返回 4,不返回 8。那是因为return退出返回特定值的函数。因此,在您的函数中,该函数在第一个实例中命中PCA[i] == 1然后退出该函数。相反,您应该创建一个向量、列表或其他替代方法并返回它。

retrievePCA<-function(data) {
  ids <- vector('list', nrow(data))
  for (i in 1:nrow(data)) {
    if (data$PCA[i] == 1) {
      ids[[i]] <-data$CPSIDP[i]
    } 
  }
  return unlist(ids)
}

但是,您可以在一行中执行此操作

data$CPSIDP[data$PCA == 1]

推荐阅读