gpt4 book ai didi

r - 使用 for 循环和 rbind 遍历多个文件

转载 作者:行者123 更新时间:2023-12-02 05:17:47 24 4
gpt4 key购买 nike

我有一个包含 14 个函数的小型 R 脚本,想为 81 个文件运行它。虽然我已经阅读了关于解决类似问题的 Stack Overflow 上的几篇文章,但我仍然无法正常工作。我正在使用 for 循环和 rbind

循环工作的 { } 中的所有函数。我在没有 for 循环的情况下对它们进行了测试,我得到了我需要的数据向量。但是当我运行 for 循环时,我只得到文件夹中最后一个文件的输出。我不确定发生了什么。

for 循环是否正常工作(是否遍历文件)并且只是覆盖了之前的运行?如果 for 循环正常工作,那么我假设我的 rbind 有问题。或者,for 循环是否只运行 list.files() 中的最后一个文件?

最后,我想要一个矩阵(或表格),其中包含 81 个文件中每个文件的 14 个函数的结果。

代码如下:

res=(1:14)
for(i in list.files())
{
nd = read.csv(i, header= TRUE, row.names =1, check.names = FALSE)
mx = as.matrix(nd)

res[1]=basename(i)
res[2]=-99 #this is just a place holder
res[3]=gden(mx)
res[4]=centralization(mx,degree)

deg = degree(mx, gmode="graph", diag=FALSE, rescale=FALSE)
res[5]=mean(deg)
res[6]=sd(deg)
res[7]=max(deg)
res[8]=min(deg)

Ndeg = degree(mx, gmode="graph", diag=FALSE, rescale=TRUE)*1000
res[9]=mean(Ndeg)
res[10]=sd(Ndeg)
res[11]=max(Ndeg)
res[12]=min(Ndeg)

iso = isolates(mx, diag=FALSE)
res[13]=length(iso)

res[14]=nrow(mx)
}
results=rbind(res)
results

最佳答案

将您的函数集组合成一个新函数并将其应用list.files()的每个元素:

out <- sapply(list.files(), function(i){ 
nd = read.csv(i, header= TRUE, row.names =1, check.names = FALSE)
mx = as.matrix(nd)

res = numeric(14)
res[1]=basename(i)
res[2]=-99 #this is just a place holder
res[3]=gden(mx)
res[4]=centralization(mx,degree)

deg = degree(mx, gmode="graph", diag=FALSE, rescale=FALSE)
res[5]=mean(deg)
res[6]=sd(deg)
res[7]=max(deg)
res[8]=min(deg)

Ndeg = degree(mx, gmode="graph", diag=FALSE, rescale=TRUE)*1000
res[9]=mean(Ndeg)
res[10]=sd(Ndeg)
res[11]=max(Ndeg)
res[12]=min(Ndeg)

iso = isolates(mx, diag=FALSE)
res[13]=length(iso)

res[14]=nrow(mx)
return(res)
}
out

关于r - 使用 for 循环和 rbind 遍历多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22054269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com