我在函数中有以下代码
Myfunc<- function(directory, MyFiles, id = 1:332) {
# uncomment the 3 lines below for testing
#directory<-"local"
#id=c(2, 4)
#MyFiles<-c(f2.csv,f4.csv)
idd<-id
df2 <- data.frame()
for(i in 1:length(idd)) {
EmptyVector <- read.csv(MyFiles[i])
comp_cases[i]<-sum(complete.cases(EmptyVector))
print(comp_cases[[i]])
id=idd[i]
ret2=comp_cases[[i]]
df2<-rbind(df2,data.frame(id,ret2))
}
print(df2)
return(df2)
}
当我尝试通过选择函数内的代码并注释掉返回值来在 R 中运行它时,这是有效的。我从打印语句中得到了一个很好的数据框:
> df2
id ret2
1 2 994
2 4 7112
但是,当我尝试返回数据框时df2
该函数仅返回第一行,忽略所有其他值。我的问题是,它在函数中适用于我尝试过的各种值(使用各种组合打开多个文件),而不是当我尝试返回数据帧时。有人可以帮忙吗?预先非常感谢。
如果我理解正确,您正在尝试创建一个数据框,其中包含每个案例的完整案例数id
。假设您的文件名称具有您指定的 id 号(例如f2.csv
),您可以按如下方式简化您的功能:
myfunc <- function(directory, id = 1:332) {
y <- vector()
for(i in 1:length(id)){
x <- id
y <- c(y, sum(complete.cases(
read.csv(as.character(paste0(directory,"/","f",id[i],".csv"))))))
}
df <- data.frame(x, y)
colnames(df) <- c("id","ret2")
return(df)
}
你可以这样调用这个函数:
myfunc("name-of-your-directory",25:87)
对上述代码的解释。您必须将问题分解为以下步骤:
- 你需要一个 id 的向量,这是通过
x <- id
- 对于每个
id
您想要完整案例的数量。为了得到这个,你必须先读取文件。这是由read.csv(as.character(paste0(directory,"/","f",id[i],".csv")))
。要获取该文件的完整案例数,您必须将read.csv
里面的代码sum
and complete.cases
.
- 现在您想将该数字添加到向量中。因此你需要一个空向量(
y <- vector()
),您可以添加步骤 2 中完整案例的数量。这是通过将步骤 2 中的代码包装在其中来完成的y <- c(y, "code step 2")
。这样您就可以添加每个案例的完整案例数id
到向量y
.
- 最后一步是将这两个向量组合成一个数据帧
df <- data.frame(x, y)
并分配一些有意义的colnames
.
通过包括步骤 1、2 和 3(除了y <- vector()
部分)在 for 循环中,您可以迭代指定 id 的列表。创建空向量y <- vector()
必须在 for 循环之前完成,以便 for 循环可以将值添加到y
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)