分配中的R语言(Assignment in R language)

2019-07-29 12:50发布

我想知道,在转让R语言是如何工作的。

考虑下列R- shell会话:

> x <- c(5, 6, 7)
> x[1] <- 10
> x
[1] 10 6 7
>

我完全理解。 的载体(5,6,7)被创建并且绑定到符号“X”。 以后,“x”为反弹到新的载体(10,6,7),因为载体是不可变的数据结构。

但是,发生在这里:

> c(4, 5, 6)[1] <- 10
Error in c(4, 5, 6)[1] <- 10 :
  target of assignment expands to non-language object
>

或在这里:

> f <- function() c(4, 5, 6)
> f()[1] <- 10
Error in f()[1] <- 10 : invalid (NULL) left side of assignment
>

在我看来,一个只能分配到命名的数据结构(如“X”)。

为什么我问的原因是因为我尝试实施R语言的核心,而且我不确定如何处理这样的任务。

提前致谢

Answer 1:

在我看来,一个只能分配到命名的数据结构(如“X”)。

这正是对文件?"<-"说:

描述:

  Assign a value to a name. 

x[1] <- 10不使用的功能相同x <- c(5, 6, 7) 前者称为[<-而后者电话<-



Answer 2:

按@欧文的回答这个问题 , x[1] <- 10是真的在做两件事情。 它调用[<-功能,并且它分配该呼叫到x的结果。

所以,你要实现你的什么c(4, 5, 6)[1] <- 10的结果是:

> `[<-`(c(4, 5, 6),1, 10)
[1] 10  5  6


Answer 3:

您可以进行修改,匿名函数,但没有分配给匿名载体。 即使[R创建了名临时副本,你有时会看到反映这一事实的错误消息。 你可以在阅读R输入语言定义,第21页上它与“子任务”和其他形式转让的表达式的计算涉及:

x[3:5] <- 13:15 
# The result of this commands is as if the following had been executed 
`*tmp*` <- x 
x <- "[<-"(`*tmp*`, 3:5, value=13:15) 
rm(`*tmp*`) 

而且还有一个警告不要使用*tmp*作为一个对象的名字,因为它会在接下来的通话过程中overwritting [<-



文章来源: Assignment in R language