当前位置: 首页 > 知识库问答 >
问题:

使用for循环构造变量名

司空健
2023-03-14

我需要构造一组变量,其中变量应基于2部分构造:a)name b)一个用value[1]加强的数字。对于不断增加的数字,我使用了for循环。我设法创建了一个字符串,参见test1,但没有增加变量名称,参见test2。

鉴于下面提供的错误代码,我假设R不希望我使用变量名中的“paste0”来构造某些东西。

我的R代码:

numbers_for_variable_name <- c(1,2,3)

# Test-1 [works]
# Construct string with increasing number.
for (i in numbers_for_variable_name) {
    cat(paste0("number-", i, "\n"))
}
# Test-2 [does not work]
# Construct variable name with increasing number.
for (i in numbers_for_variable_name) {
    paste0("number-", i) <- "p1"
}

“测试1”的结果:

number-1
number-2
number-3

我得到的test2错误是:

Error in paste0("number-", i) <- "p1" : 
  target of assignment expands to non-language object

“test2”的预期结果是:

number-1 <- "p1"
number-2 <- "p1"
number-3 <- "p1"

共有2个答案

诸葛文博
2023-03-14

要使OP的代码起作用,应该是assign,为值分配一个标识符

for (i in numbers_for_variable_name) {
   assign(paste0("number-", i),  "p1")
 }

请注意,带有-的标识符不是标准的,但_是可以的。因此,如果我们想获取值,请使用反引号

`number-1`
#[1] "p1"

`number-2`
#[1] "p1"

但是,不建议在全局环境中有多个对象

谷出野
2023-03-14

您应该使用随R-a列表一起提供的结构。您可以使用lApplicationlApplication(或只是循环)为其命名、轻松子集或应用函数。

numbers_for_variable_name <- c(1,2,3)

myresult <- vector("list", length = length(numbers_for_variable_name))
names(myresult) <- paste("number-", numbers_for_variable_name, sep = "")

for (i in numbers_for_variable_name) {
  myresult[[i]] <- i
}

> myresult
$`number-1`
[1] 1

$`number-2`
[1] 2

$`number-3`
[1] 3

子集:

> myresult[["number-3"]]
[1] 3

将函数应用于所有列表元素:

> lapply(myresult, FUN = function(x) x^2)
$`number-1`
[1] 1

$`number-2`
[1] 4

$`number-3`
[1] 9
 类似资料:
  • 在循环中,我是否可以对循环使用相同的计数器变量? 或者这些变量会相互影响吗?以下代码应该为第二个循环使用不同的变量,例如,还是可以?

  • 在我的程序中,我发现当为时,循环无法正确退出。它看起来像整数溢出,远远大于10,循环不会停止。请告诉我发生了什么,以及如何在大型项目中避免这个错误。 代码链接

  • 和C语言不同的的是 和if一样,条件表达式的值必须是布尔类型 和if一样,不需要编写圆括号 和if一样,左大括号必须和表达式在同一行 格式: for 初始化表达式;循环条件表达式;循环后的操作表达式 { 循环体语句; } package main import "fmt" func main() { for i:=0; i<10; i++{ fmt.Println(i

  • 问题内容: 知道为什么for循环初始化程序中的此struct表达式在编译时会导致语法错误吗?在这种情况下,指向struct的指针工作正常,但是我需要像波纹管这样的局部变量。感谢您的建议! 问题答案: 简化您的代码: 给出编译时错误: 预期的布尔值或范围表达式,找到简单的语句(缺少复合文字周围的括号?)(以及另外1个错误) 该构造难以解析。不管是复合文字的一部分还是语句本身( 块)的开头括号,开头括

  • 问题内容: 因此,我正在尝试做某事,不确定是否可能。我有以下代码: 我想做的是为{0..5}的每个实例分配一个唯一的变量,因此为每个变量名指定group1 group2 group3 group4。然后,我将./user0更改为./user$i并根据我的序列创建动态变量列表。这可能吗?尝试执行此操作时出现以下错误,但我不确定bash不喜欢自己实际执行了什么操作。 test.sh:第16行:grou

  • 我的代码是: 这似乎不会在我的变量列表中循环。有什么想法吗?提前致谢