在R中的循环中将字符串视为对象名称

Tab*_*sco 8 string loops r object

我想在循环中创建一个字符串,并在此循环中将此字符串用作对象。这是一个简化的示例:

for (i in 1:2) {
  x <- paste("varname",i, sep="")
  x <- value
}
Run Code Online (Sandbox Code Playgroud)

循环应创建varname1,varname2。然后,我想使用varname1,varname2作为对象来分配值。我尝试了paste(),print()等。感谢您的帮助!

Ric*_*ven 6

您可以创建call()to <-,然后对其进行评估。这是一个例子

value <- 1:5

for (i in 1:2) {
    x <- paste("varname",i, sep="")
    eval(call("<-", as.name(x), value))
}
Run Code Online (Sandbox Code Playgroud)

这将创建两个对象varname1varname2

varname1
# [1] 1 2 3 4 5
varname2
# [1] 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)

但是您应该真正避免在方法/函数中使用分配给全局环境。我们可以将列表与一起使用substitute(),然后将新变量放在同一位置。

f <- function(aa, bb) {
    eval(substitute(a <- b, list(a = as.name(aa), b = bb)))
}

Map(f, paste0("varname", 1:2), list(1:3, 3:6))
# $varname1
# [1] 1 2 3
#
# $varname2
# [1] 3 4 5 6
Run Code Online (Sandbox Code Playgroud)


Mah*_*RAN 1

assign("variableName", 5)
Run Code Online (Sandbox Code Playgroud)

会那样做的。

例如,如果字符串数组中有变量名称,则可以将它们设置为循环:

assign(varname[1], 2 + 2)
Run Code Online (Sandbox Code Playgroud)

越来越多的信息

https://stat.ethz.ch/R-manual/R-patched/library/base/html/assign.html