首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用for-循环构造变量名。

使用for-循环构造变量名。
EN

Stack Overflow用户
提问于 2019-05-13 12:49:09
回答 2查看 96关注 0票数 0

我需要构造一组变量,其中变量应该基于两个部分来构造:( a)名称( b)一个值为1的数字。对于递增的数字,我使用For -循环。我设法创建了一个字符串参见test1,但没有增加变量名,请参见test2。

考虑到下面提供的错误代码,我假设R不希望我使用"paste0“来构造变量名的一部分。

我的R码:

代码语言:javascript
复制
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"
}

“test1”的结果:

代码语言:javascript
复制
number-1
number-2
number-3

对于test2,我得到的错误是:

代码语言:javascript
复制
Error in paste0("number-", i) <- "p1" : 
  target of assignment expands to non-language object

"test2“的预期结果是:

代码语言:javascript
复制
number-1 <- "p1"
number-2 <- "p1"
number-3 <- "p1"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-13 12:57:30

您应该使用R-列表附带的结构。您可以使用lapplylapply来命名它、很容易地对其进行子集或向其应用函数(或者只需循环通过)。

代码语言:javascript
复制
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

细分:

代码语言:javascript
复制
> myresult[["number-3"]]
[1] 3

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

代码语言:javascript
复制
> lapply(myresult, FUN = function(x) x^2)
$`number-1`
[1] 1

$`number-2`
[1] 4

$`number-3`
[1] 9
票数 3
EN

Stack Overflow用户

发布于 2019-05-13 12:50:04

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

代码语言:javascript
复制
for (i in numbers_for_variable_name) {
   assign(paste0("number-", i),  "p1")
 }

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

代码语言:javascript
复制
`number-1`
#[1] "p1"

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

但是,在全局环境中有多个对象是不可取的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56112731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档