楼主: 转身zhi後
4031 22

[问答] R语言如何循环使用data的某一行数据与另一data的某一行数据做一分析,用的r包如下 [推广有奖]

11
fyc7346165 发表于 2018-12-20 11:18:35
转身zhi後 发表于 2018-12-20 10:13
我用split将数据框的每一行读作一元素,接下来不知道怎么操作了,我看网上的lapply用法似乎不太合适啊,能 ...
一般数据框每行是一个样本,每列是一个变量
所以你这里的CCT1更像是一个只有一个样本,然后又X_1,X_2....等好多个变量的数据框

既然你是把每行作为一个变量的话
  1. ## 把X和CCT1转置
  2. ## 这样X的每行代表一个样本,每列代表一个变量
  3. ## CCT1是一个向量,代表一个变量
  4. X <- t(X)
  5. CCT1 <- as.vector(t(CCT1))

  6. ## 通过lapply求结果
  7. ## 这里的...是bnnpt的除了X的某一列之外的其它参数
  8. lapply(X, bnnpt, ...)
复制代码

12
转身zhi後 发表于 2018-12-20 14:25:50
fyc7346165 发表于 2018-12-20 11:18
一般数据框每行是一个样本,每列是一个变量
所以你这里的CCT1更像是一个只有一个样本,然后又X_1,X_2.. ...
bnnpt(x,y,bags=20, mtry=10, perm=100)
bnnpt的用法是这样,用lapply的话要求第二项是函数吧,这里的bnnpt是我加载的一个r包
按大佬您所说...是bnnpt的其他参数,我不知道是个什么样的形式。

13
fyc7346165 发表于 2018-12-20 14:35:39
转身zhi後 发表于 2018-12-20 14:25
bnnpt(x,y,bags=20, mtry=10, perm=100)
bnnpt的用法是这样,用lapply的话要求第二项是函数吧,这里的bn ...
  1. lapply(X, bnnpt, y = CTT1, bags=20, mtry=10, perm=100)
复制代码

14
转身zhi後 发表于 2018-12-20 14:51:09
fyc7346165 发表于 2018-12-20 14:35
> lapply(X, bnnpt, y = CCT1, bags=20, mtry=10, perm=100)
Error in sample.int(length(x), size, replace, prob) :
  invalid first argument
还是提示有错误
我每次单独调用一个量运行没问题。
> m<-X[,2]
> bnnpt(m,CCT1,bags=50,mtry=10,perms=100)
BNNPT's pvalue
          0.37
程序每次运行,都会有一个结果。
但是我自己也尝试for循环,不报错,但是一直没输出。
> for(n in 1:415)
+ {
+     m<-X[,n]
+     bnnpt(m,CCT1,bags=50,mtry=10,perms=100)
+ }
这样每次运行完没有任何结果,但是我看变量提示的确已经读取到了X的最后一列

15
fyc7346165 发表于 2018-12-20 14:58:42
转身zhi後 发表于 2018-12-20 14:51
> lapply(X, bnnpt, y = CCT1, bags=20, mtry=10, perm=100)
Error in sample.int(length(x), size, re ...
bnnpt这个函数的第二个参数的参数名是y么?

16
转身zhi後 发表于 2018-12-20 15:17:00
fyc7346165 发表于 2018-12-20 14:58
bnnpt这个函数的第二个参数的参数名是y么?
bnnpt这个R包能视为一个函数吗?这里面的第二个参数是y
> lapply(X, bnnpt(X,CCT1, bags=20, mtry=10, perm=100))
我改成这样,程序一直在运行,但是没结果,就是没有BNNPT's pvalue 这个东西出来

17
fyc7346165 发表于 2018-12-20 15:29:28
转身zhi後 发表于 2018-12-20 15:17
bnnpt这个R包能视为一个函数吗?这里面的第二个参数是y
> lapply(X, bnnpt(X,CCT1, bags=20, mtry=10, p ...
包是包,函数是函数,你这个包的名字叫BNNPT,bnnpt是这个包里的一个函数

输入?bnnpt可以看这个函数的说明,他的所有参数,第二个参数的名称是y么

18
转身zhi後 发表于 2018-12-20 15:42:32
fyc7346165 发表于 2018-12-20 15:29
包是包,函数是函数,你这个包的名字叫BNNPT,bnnpt是这个包里的一个函数

输入?bnnpt可以看这个函数的 ...
Usage
bnnpt(x, y, bags, mtry, perms)

Arguments
x       
A vector containing values of a continuous variable (X).
y       
A vector containing values of a continuous variable (Y).
bags       
the number of bagging.
mtry       
the number of randomly selected values from X.
perms       
the number of permutations to calculate permutation pvalues.

Value
pvalue The pvalue of BNNPT.

Examples
#Example1
set.seed(1234)
x<-rnorm(1000)
y<-rnorm(1000)
#Test whether X and Y are independent or not using BNNPT
library(BNNPT)
#Set the parameters: bags= 20, mtry = 10, perms = 100
t1<- Sys.time()
bnnpt(x,y,bags=20, mtry=10, perm=100)
t2<- Sys.time()
#Output calculation time of BNNPT
t2-t1

#Example2
#Generate random variables X and Y with sin function
set.seed(1234)
x<-rnorm(1000)
y<-sin(x)
#Test whether X and Y are independent or not using BNNPT
library(BNNPT)
t1<- Sys.time()
#Set the parameters: bags= 50, mtry = 10, perms = 100
bnnpt(x,y,bags=50, mtry=10, perm=100)
t2<- Sys.time()
#Output calculation time of BNNPT
t2-t1
都在这了

19
fyc7346165 发表于 2018-12-20 15:57:40
转身zhi後 发表于 2018-12-20 15:42
Usage
bnnpt(x, y, bags, mtry, perms)
在lapply之前加上
  1. X <- as.data.frame(X)
复制代码
试试看
转置之后X变成了矩阵,应该要转换成数据框才好用lapply

20
转身zhi後 发表于 2018-12-20 17:15:55
fyc7346165 发表于 2018-12-20 15:57
在lapply之前加上试试看
转置之后X变成了矩阵,应该要转换成数据框才好用lapply
成功了,问题解决了。
还是再次多谢大佬,多谢!{:3_59:}

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-7 05:19