从函数返回数据帧

标签 r function dataframe

我在函数中有以下代码

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中运行它时,此方法有效。我从print语句中得到了一个不错的数据框:
> 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代码包装在sumcomplete.cases中。
  • 现在,您想将该数字添加到向量中。因此,您需要一个空向量(y <- vector()),可以在其中添加第2步中完整案例的数量。这是通过将第2步中的代码包装在y <- c(y, "code step 2")中来完成的。这样,您就可以将每个id的完整案例数添加到矢量y中。
  • 最后一步是将这两个向量与df <- data.frame(x, y)组合成一个数据帧,并分配一些有意义的colnames

  • 通过在一个for循环中包含步骤1、2和3(y <- vector()部分除外),您可以遍历指定ID的列表。必须在for循环之前使用y <- vector()创建空向量,以便for循环可以将值添加到y

    关于从函数返回数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24212723/

    相关文章:

    c++ - 在带有 Rcpp 的 R 包中使用头文件 (.h) 和 cpp 文件

    r - 如何将正弦变换后的向量转换回原始向量?

    javascript - 为什么这个数组不打印?

    python - 无法根据python中的用户输入过滤csv表中的数据

    python - 条件格式化 Pandas

    r - 使用 R 查找包含最大值的行索引

    r - 具有比 R 中的观察值更多级别的因子的数据框

    javascript - 将 javascript 参数字传递给自定义函数

    math - 你如何创建一个 yield 递减的公式?

    python - 以最佳方式迭代 pandas 中的数百万行