在R中使用循环中的字符串作为函数命令和变量名的一部分

在R中使用循环中的字符串作为函数命令和变量名的一部分,r,R,如何使用来自循环的字符串 -生成新变量的步骤 -作为功能命令的一部分 -作为函数的参数 -作为if语句的一部分 在R 具体来说,作为一个例子(代码显然不起作用,但我希望有一些东西不比下面的内容更容易理解) list\u dist试试这个: list_dist <- list(unif = runif,norm = rnorm) for (i in 1:length(list_dist)){ assign(paste("rv",names(list_dist)[i],sep=""),

如何使用来自循环的字符串 -生成新变量的步骤
-作为功能命令的一部分
-作为函数的参数
-作为if语句的一部分
在R

具体来说,作为一个例子(代码显然不起作用,但我希望有一些东西不比下面的内容更容易理解)

list\u dist试试这个:

list_dist <- list(unif = runif,norm = rnorm)
for (i in 1:length(list_dist)){
    assign(paste("rv",names(list_dist)[i],sep=""), list_dist[[i]](100,0,1))
    assign(paste("meanrv",names(list_dist)[i],sep=""),mean(get(paste("rv",names(list_dist)[i],sep=""))))
    if (round(get(paste("meanrv",names(list_dist)[i],sep="")),3) != 0){
        print("Not small enough")
    }
}
list\u dist试试这个:

list_dist <- list(unif = runif,norm = rnorm)
for (i in 1:length(list_dist)){
    assign(paste("rv",names(list_dist)[i],sep=""), list_dist[[i]](100,0,1))
    assign(paste("meanrv",names(list_dist)[i],sep=""),mean(get(paste("rv",names(list_dist)[i],sep=""))))
    if (round(get(paste("meanrv",names(list_dist)[i],sep="")),3) != 0){
        print("Not small enough")
    }
}

list\u dist抵制以编程方式创建变量名的诱惑。相反,请将数据正确地组织到列表中:

list_dist = list(unif = runif, norm = rnorm)
distributions = lapply(list_dist, function (f) f(100, 0, 1))
means = unlist(lapply(distributions, mean))
# … etc.
如您所见,这也通过使用列表函数来消除循环

您的最后一步也可以矢量化:

if (any(round(means, 3) != 0))
    warning('not small enough')

抵制以编程方式创建变量名的诱惑。相反,请将数据正确地组织到列表中:

list_dist = list(unif = runif, norm = rnorm)
distributions = lapply(list_dist, function (f) f(100, 0, 1))
means = unlist(lapply(distributions, mean))
# … etc.
如您所见,这也通过使用列表函数来消除循环

您的最后一步也可以矢量化:

if (any(round(means, 3) != 0))
    warning('not small enough')

将它们放入列表:
myList或使用
assign()
get()
也可以
do.call
。在一天结束时,对你正在尝试做的事情给出更多的见解,你可能从错误的角度看待问题。也被称为XY问题谢谢你的建议!我也尝试过do.call,但当我想用循环中的字符串作为名称的一部分并使用do.call结果(反过来使用循环)创建一个新的var时,我遇到了问题。无论如何,谢谢你把这些列在一个列表中:
myList或者使用
assign()
get()
也可以
do.call
。在一天结束时,对你要做的事情给出更多的见解,你可能是从错误的角度看待问题。也被称为XY问题谢谢你的建议!我也尝试过do.call,但当我想用循环中的字符串作为名称的一部分并使用do.call结果(反过来使用循环)创建一个新的var时,我遇到了问题。无论如何,谢谢。几乎可以肯定,将结果分配到命名列表中比分配到当前环境中要好。这无疑简化了代码。我试图给出尽可能接近原始请求的答案。您可能是对的,但几乎可以肯定,将结果分配到命名列表比分配到当前环境要好。这无疑简化了代码。我试图给出尽可能接近原始请求的答案。你可能是对的,尽管我很好奇,想知道是否有可能以及如何回答这种特定的编码方式。无论如何,你是对的,我可以用几种方法来做这件事,你的建议非常有趣(注意:刚刚开始学习R,所以我非常感谢这些建议)。非常感谢。我很好奇,想知道是否以及如何能够对这种特定的编码方式给出答案。无论如何,你是对的,我可以用几种方法来做这件事,你的建议非常有趣(注意:刚刚开始学习R,所以我非常感谢这些建议)。非常感谢。