gpt4 book ai didi

r - 基于变量名称R的名称列表元素

转载 作者:行者123 更新时间:2023-12-04 18:05:17 25 4
gpt4 key购买 nike

我想将元素动态添加到一个空列表中。列表中的每个元素应在一组变量会自动命名,变量值会有所不同。

但是,我似乎找不到不出错就可以动态命名列表元素的方法。考虑下面的示例:

L <- list()

var1 <- "wood"
var2 <- 1.0
var3 <- "z4"

varname <- paste(var1, as.character(var2), var3, sep="_")

# This works fine:
L$"wood_1_z4" <- c(0,1)
L$"wood_1_z4"
0 1

# This doesn't!!
L$paste(var1, as.character(var2), var3, sep="_") <- c(0,1)
Error in L$paste(var1, as.character(var2), var3, sep = "_") <- c(0, 1) :
invalid function in complex assignment

# Ths doesn't either ...
L$eval(parse(text = "varname")) <- c(0,1)
Error in L$eval(parse(text = "varname")) <- c(0, 1) :
target of assignment expands to non-language object


有没有办法做到这一点?

最佳答案

您不能使用paste()运算符将其分配给<-(我相信eval()函数也是如此)。相反,您需要使用[[运算符或使用names()函数。您可以这样做:

L <- list()
var1 <- "wood"
var2 <- 1.0
var3 <- "z4"
varname <- paste(var1, as.character(var2), var3, sep="_")

# Using [[
L[[varname]] <- c(0,1)

> L
$wood_1_z4
[1] 0 1

# Using names()
L[[1]] <- c(0,1)
names(L)[1] <- varname

> L
$wood_1_z4
[1] 0 1


一种更有效的方法可能是使用一个既创建值又命名列表元素的函数,或者甚至是一个仅创建值的函数-如果您随后使用 sapply,则可以使用来自调用您的函数和 USE.NAMES选项。

一般而言,当列表的最终大小和结构不为人所知时,对于随时间增长的列表,R并没有得到很好的优化。尽管可以做到,但更“ R-ish”的方法是提前弄清楚结构。

关于r - 基于变量名称R的名称列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30351866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com