R:关于函数何时理解其参数的一些提示?

标签 r function lapply

我正在尝试编写一个可以应用于字符串向量或列表的函数,而不是编写一个循环。我的目标是对不同的内生变量进行回归并保存结果表。既然有经验的 R 用户告诉我们应该学习应用函数,我想试一试。这是我的尝试:

错误示例:

library(ExtremeBounds)
Data <- data.frame(var1=rbinom(30,1,0.2),var2=rbinom(30,1,0.2),var3=rnorm(30),var4=rnorm(30),var5=rnorm(30),var6=rnorm(30))

spec1 <- list(y=c("var1"),freevars=("var3"),doubtvars=c("var4","var5"))
spec2 <- list(y=c("var2"),freevars=("var4"),doubtvars=c("var3","var5","var6"))
specs <- c("spec1","spec2")

myfunction <- function(x){
eba <- eba(data=Data, y=x$y, 
       free=x$freevars, 
       doubtful=x$doubtvars, 
       reg.fun=glm, k=1, vif=7, draws=50, se.fun = se.robust, weights = "lri", family = binomial(logit))

output <- eba$bounds
output <- output[,-(3:7)]
}

lapply(specs,myfunction)

这给了我一个错误,让我猜测 R 不理解什么时候 x 应该是 "spec1""spec2"。另外,我不太明白 lapply 会尝试在这里收集什么。您能否为我提供一些最佳实践/提示,说明如何将此类内容传达给 R?

错误:x$y 中的错误:$ 运算符对于原子向量无效

工作示例:

这是 spec1 的一个工作示例,它没有使用 apply 来展示我正在尝试做的事情。我想通过 7 个规范循环此示例,但我正试图摆脱循环。输出不必保存为 csv,所有输出的列表或任何其他集合都会很棒!

eba <- eba(data=Data, y=spec1$y, 
       free=spec1$freevars, 
       doubtful=spec1$doubtvars, 
       reg.fun=glm, k=1, vif=7, draws=50, se.fun = se.robust, weights = "lri", family = binomial(logit))
output <- eba$bounds
output <- output[,-(3:7)]
write.csv(output, "./Results/eba_pmr.csv")

最佳答案

根据@user20650的评论,解决方法很简单:

在 lapply 命令中,使用 lapply(mget(specs),myfunction)它获取 specs 的列表元素的名称而不是列表本身。

或者,可以定义 specs作为列表:specs <- list(spec1,spec2)但这有一个缺点,即 lapply 命令将返回一个列表,其中对不同的规范进行了编号。第一个版本保留了规范的名称(spec1spec2),这使得使用结果列表更容易。

关于R:关于函数何时理解其参数的一些提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32927053/

相关文章:

r - 用成对的行旋转更宽

r - 使用函数向 ggplot 添加多个图层

c++ - 在字符串字段中查找字符串的索引

r - 取列表的加权平均值

r - 更改 for 循环以覆盖多个文件

r - 如何使用方差分析分数结果来消除 p 值大于 0.01 的列/预测变量

我可以在 COBOL 中嵌入 C 函数吗?

node.js - 从 Firestore 获取异步值

javascript - 带函数参数的函数

r - 使用 cut() 从多个数值变量创建许多因子变量,并从列表中提取中断