我需要构造一组变量,其中变量应该基于两个部分来构造:( a)名称( b)一个值为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"
}“test1”的结果:
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"发布于 2019-05-13 12:57:30
您应该使用R-列表附带的结构。您可以使用lapply或lapply来命名它、很容易地对其进行子集或向其应用函数(或者只需循环通过)。
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发布于 2019-05-13 12:50:04
为了使OP的代码工作,应该是assign为值分配一个标识符
for (i in numbers_for_variable_name) {
assign(paste0("number-", i), "p1")
}注意,带有-的标识符不是标准的,但是_是可以的。因此,如果我们想要得到值,请使用反引号。
`number-1`
#[1] "p1"
`number-2`
#[1] "p1"但是,在全局环境中有多个对象是不可取的。
https://stackoverflow.com/questions/56112731
复制相似问题