我编写了一个 R 循环并将其转换为一个接收数据帧的函数,原始代码和数据帧如下。目标是重复这个函数或循环 1000 次,最终得到一个数据框,该数据框有 1000 列代表每个 row.name 的行和。
我的目标是看起来像这样的数据框
row.names rsum_s1 rsum_s2 rsum_s3 rsum_s4.....rsum_s1000
kc231 40 57 15 34
kc25498 34 39 567 23
kc087398 28 3747 25 1938
x 是原始数据框,它看起来像这样:
row.names val2 val4 val3 val4
kc231 1.62E-08 3.29E-37 1.36E-14 0.29692426
kc25498 4.93E-01 4.93E-01 4.93E-01 0.49330053
kc087398 3.50E-01 1.18E-22 1.71E-08 0.35011743
循环我第一次写作品给我 rsum_s 作为一个列表。
for(k in 1:length(colnames(x))) {
as.numeric(x[,k])
sample(x[,k])
x[,k]<-rank(x[,k],ties.method="min")
rsum_s<-rowSums(x)
LOOP 的输出是每行的排名和。每行中的名称 id:rsum_s
structure(c(47, 142, 82), .Names = c("kc231", "kc25498", "kc087398"))
LOOP 转换为 FUNCTION
sim<-function(x) { #takes a data.frame
for(k in 1:length(colnames(x))) { #each column set as numeric
as.numeric(x[,k])
sample(x[,k]) #randomly shuffle values in each column
x[,k]<-rank(x[,k],ties.method="min") #rank each randomly shuffled columns
rsum_s<-rowSums(x) #take the sum of the rows
return(rsum_s)
}
}
函数的结果是整数而不是整数。
sim(dataframe1)
kc231 kc25498 kc087398
18.24 37.47 32.350117
我不确定我在这里做错了什么。我需要执行 1000 次循环,并在每次循环运行到数据帧或复制函数 sim 1000 次时附加秩和列,并将所有结果转换为可以工作的数据帧。因此,如果有人可以帮助我完成这项任务,那就太好了
任何帮助深表感谢。