R定义变量向量

时间:2015-08-14 09:52:53

标签: r

有人可以让我深入了解为什么这段代码不起作用?

tr <- function(x,y,z){eval(as.symbol(paste0(x,y,z)))}

sr <- c("bla","gla")
blablabla <- as.numeric()

tr("bla",sr[1],"bla")[1] <- 1

我定义了一个函数tr,它粘贴三个字符串并将其转换为变量向量。然后我尝试将该向量的第一个元素更改为1,但是我一直遇到错误:

  

tr中的错误(“bla”,sr [1],“bla”)[1]&lt; - 1:     赋值目标扩展为非语言对象

2 个答案:

答案 0 :(得分:1)

错误原因。

as.symbol(paste0(x,y,z))从您粘贴的字符串中创建一个符号。

然后

eval(as.symbol(paste0(x,y,z))评估该符号的值。所以,在你创建了一个名为&#39; blablabla&#39;没有任何内容。然后你评估它以给numeric(0)

然后返回numeric(0)并尝试为其指定一个值,为您提供错误。

错误解决方案

我不会放入支票和事情,但是假设您创建了一个名为blablabla的变量并将值指定为1(blablabla <- 1)。这可以防止先前的错误发生。然后使用代码:

tr <- function(x,y,z, index, value){
    var_temp <- eval(as.symbol(paste0(x,y,z)))
    var_temp[index] <- value
    return(var_temp)
}

根据索引和值参数,为向量中的不同值指定值。您还必须将输出分配给某个东西,因为blablabla只会在函数范围内更改,因此可以使用它:blablabla <- tr("bla", "bla", "bla", 1, 2)将第一个元素设置为两个。

这会回答这个问题吗?

答案 1 :(得分:1)

据我所知,R只允许你对变量“name”进行赋值。

如果您这样做,我猜你的代码会起作用:

A <- tr("bla",sr[1],"bla")

A[1] <- 1

希望这有帮助。