链接两个函数
Linking two functions
我不得不承认我是编码函数的新手,因此我需要你的帮助。
此代码应在方差分析后提供贝叶斯准则 (pBIC),并自动从方差分析中读取必要的信息 table。
我有两个功能
## This is function 1
test_pBIC1 <- function(name,c){ ## name is the name of the ANOVA table, e.g. "ANOVA_ALL_wake" and c is the number of conditions
c = c
data = get(name)
i = length(data$ANOVA$Effect)
result1 = data.frame(name,c,i)
return(result1)
}
## ----------------------------------------------------
## I now run and save the result of Function 1
result1 <- test_pBIC1("ANOVA_ALL_wake",3) ## for test
## ----------------------------------------------------
## This is function 2
test_pBIC2 <- function(result1){
name1 <- as.character(result1$name)
data = get(name1)
count <- as.vector(result1$i)
for (i in 1:count){
s = (data$ANOVA$DFd[i]/data$ANOVA$DFn[i])+1
n = s*(result1[2]-1)
SSE1 = data$ANOVA$SSd[i]
SSE0 = data$ANOVA$SSd[i]+data$ANOVA$SSn[i]
deltaBIC = (n * log(SSE1/SSE0))+(data$ANOVA$DFn[i]*log(n))
BF01 = exp(deltaBIC/2)
pH0_D = (BF01/(1+BF01))
pH1_D = (1-pH0_D)
result = data.frame(pH0_D, pH1_D)
colnames(result) <- c("pH0_D", "pH1_D")
rownames(result) <- c(data$ANOVA$Effect[i])
if (i == 1){
result_all <- result
} else {
result_all <- rbind (result_all, result)
}
}
return(result_all)
}
## ------------------------------------------------------
Now I run function 2 and receive the result
test_pBIC2(result1)
现在虽然这是它的工作,但我想 link 这两个函数,所以我只需要给出名称和参数 c,最后仍然得到 result_all,即没有必须 运行 这两个功能相继出现。
我试过想出这个解决方案:
test_pBIC <- function(name,c){ ## pass arguments as: test_pBIC(name = "ANOVA_all_wake", c = 3)
c = c
name = name
result1 = data.frame(name,c)
# return(result1)
test_pBIC1 <- function(result1){
c = as.vector(result1$c)
name1 <- as.character(result1$name)
data = get(name)
i = length(data$ANOVA$Effect)
result2 = data.frame(name,c,i)
# return(result2)
test_pBIC2 <- function(result2){
name1 <- as.character(result2$name)
data = get(name1)
count <- as.numeric(integer$i)
for (i in 1:count){
s = (data$ANOVA$DFd[i]/data$ANOVA$DFn[i])+1
n = s*(result1[2]-1)
SSE1 = data$ANOVA$SSd[i]
SSE0 = data$ANOVA$SSd[i]+data$ANOVA$SSn[i]
deltaBIC = (n * log(SSE1/SSE0))+(data$ANOVA$DFn[i]*log(n))
BF01 = exp(deltaBIC/2)
pH0_D = (BF01/(1+BF01))
pH1_D = (1-pH0_D)
result = data.frame(pH0_D, pH1_D)
colnames(result) <- c("pH0_D", "pH1_D")
rownames(result) <- c(data$ANOVA$Effect[i])
if (i == 1){
result_all <- result
} else {
result_all <- rbind (result_all, result)
}
}
return(result_all)
}
}
}
test_pBIC("ANOVA_all_wake", 3)
但是,我什么也没得到...而且我找不到错误:(。
谢谢!!
在您的第一个代码示例中,您创建了函数 test_pBIC1
和 test_pBIC2
。如果你想创建一个调用两者的函数 test_pBIC
,你可以只定义一个调用两者的函数:
test_pBIC <- function(name, c) test_pBIC2(test_pBIC1(name, c))
不完全确定问题出在哪里,一个可重现的例子会有很大帮助。如果你只想将它组合成一个函数,你可以做...
test_overall <- function(name,c) {
c = c
data = get(name)
i = length(data$ANOVA$Effect)
result1 = data.frame(name,c,i)
name1 <- as.character(result1$name)
data = get(name1)
count <- as.vector(result1$i)
for (i in 1:count){
s = (data$ANOVA$DFd[i]/data$ANOVA$DFn[i])+1
n = s*(result1[2]-1)
SSE1 = data$ANOVA$SSd[i]
SSE0 = data$ANOVA$SSd[i]+data$ANOVA$SSn[i]
deltaBIC = (n * log(SSE1/SSE0))+(data$ANOVA$DFn[i]*log(n))
BF01 = exp(deltaBIC/2)
pH0_D = (BF01/(1+BF01))
pH1_D = (1-pH0_D)
result = data.frame(pH0_D, pH1_D)
colnames(result) <- c("pH0_D", "pH1_D")
rownames(result) <- c(data$ANOVA$Effect[i])
if (i == 1){
result_all <- result
} else {
result_all <- rbind (result_all, result)
}
}
return(result_all)
}
我不得不承认我是编码函数的新手,因此我需要你的帮助。
此代码应在方差分析后提供贝叶斯准则 (pBIC),并自动从方差分析中读取必要的信息 table。
我有两个功能
## This is function 1
test_pBIC1 <- function(name,c){ ## name is the name of the ANOVA table, e.g. "ANOVA_ALL_wake" and c is the number of conditions
c = c
data = get(name)
i = length(data$ANOVA$Effect)
result1 = data.frame(name,c,i)
return(result1)
}
## ----------------------------------------------------
## I now run and save the result of Function 1
result1 <- test_pBIC1("ANOVA_ALL_wake",3) ## for test
## ----------------------------------------------------
## This is function 2
test_pBIC2 <- function(result1){
name1 <- as.character(result1$name)
data = get(name1)
count <- as.vector(result1$i)
for (i in 1:count){
s = (data$ANOVA$DFd[i]/data$ANOVA$DFn[i])+1
n = s*(result1[2]-1)
SSE1 = data$ANOVA$SSd[i]
SSE0 = data$ANOVA$SSd[i]+data$ANOVA$SSn[i]
deltaBIC = (n * log(SSE1/SSE0))+(data$ANOVA$DFn[i]*log(n))
BF01 = exp(deltaBIC/2)
pH0_D = (BF01/(1+BF01))
pH1_D = (1-pH0_D)
result = data.frame(pH0_D, pH1_D)
colnames(result) <- c("pH0_D", "pH1_D")
rownames(result) <- c(data$ANOVA$Effect[i])
if (i == 1){
result_all <- result
} else {
result_all <- rbind (result_all, result)
}
}
return(result_all)
}
## ------------------------------------------------------
Now I run function 2 and receive the result
test_pBIC2(result1)
现在虽然这是它的工作,但我想 link 这两个函数,所以我只需要给出名称和参数 c,最后仍然得到 result_all,即没有必须 运行 这两个功能相继出现。
我试过想出这个解决方案:
test_pBIC <- function(name,c){ ## pass arguments as: test_pBIC(name = "ANOVA_all_wake", c = 3)
c = c
name = name
result1 = data.frame(name,c)
# return(result1)
test_pBIC1 <- function(result1){
c = as.vector(result1$c)
name1 <- as.character(result1$name)
data = get(name)
i = length(data$ANOVA$Effect)
result2 = data.frame(name,c,i)
# return(result2)
test_pBIC2 <- function(result2){
name1 <- as.character(result2$name)
data = get(name1)
count <- as.numeric(integer$i)
for (i in 1:count){
s = (data$ANOVA$DFd[i]/data$ANOVA$DFn[i])+1
n = s*(result1[2]-1)
SSE1 = data$ANOVA$SSd[i]
SSE0 = data$ANOVA$SSd[i]+data$ANOVA$SSn[i]
deltaBIC = (n * log(SSE1/SSE0))+(data$ANOVA$DFn[i]*log(n))
BF01 = exp(deltaBIC/2)
pH0_D = (BF01/(1+BF01))
pH1_D = (1-pH0_D)
result = data.frame(pH0_D, pH1_D)
colnames(result) <- c("pH0_D", "pH1_D")
rownames(result) <- c(data$ANOVA$Effect[i])
if (i == 1){
result_all <- result
} else {
result_all <- rbind (result_all, result)
}
}
return(result_all)
}
}
}
test_pBIC("ANOVA_all_wake", 3)
但是,我什么也没得到...而且我找不到错误:(。
谢谢!!
在您的第一个代码示例中,您创建了函数 test_pBIC1
和 test_pBIC2
。如果你想创建一个调用两者的函数 test_pBIC
,你可以只定义一个调用两者的函数:
test_pBIC <- function(name, c) test_pBIC2(test_pBIC1(name, c))
不完全确定问题出在哪里,一个可重现的例子会有很大帮助。如果你只想将它组合成一个函数,你可以做...
test_overall <- function(name,c) {
c = c
data = get(name)
i = length(data$ANOVA$Effect)
result1 = data.frame(name,c,i)
name1 <- as.character(result1$name)
data = get(name1)
count <- as.vector(result1$i)
for (i in 1:count){
s = (data$ANOVA$DFd[i]/data$ANOVA$DFn[i])+1
n = s*(result1[2]-1)
SSE1 = data$ANOVA$SSd[i]
SSE0 = data$ANOVA$SSd[i]+data$ANOVA$SSn[i]
deltaBIC = (n * log(SSE1/SSE0))+(data$ANOVA$DFn[i]*log(n))
BF01 = exp(deltaBIC/2)
pH0_D = (BF01/(1+BF01))
pH1_D = (1-pH0_D)
result = data.frame(pH0_D, pH1_D)
colnames(result) <- c("pH0_D", "pH1_D")
rownames(result) <- c(data$ANOVA$Effect[i])
if (i == 1){
result_all <- result
} else {
result_all <- rbind (result_all, result)
}
}
return(result_all)
}