r - 在 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
解决方案
您的问题是对函数和从函数返回的功能的简单误解。
以下面的小例子为例
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]