我想知道,在转让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语言的核心,而且我不确定如何处理这样的任务。
提前致谢
在我看来,一个只能分配到命名的数据结构(如“X”)。
这正是对文件?"<-"
说:
描述:
Assign a value to a name.
x[1] <- 10
不使用的功能相同x <- c(5, 6, 7)
前者称为[<-
而后者电话<-
按@欧文的回答这个问题 , x[1] <- 10
是真的在做两件事情。 它调用[<-
功能,并且它分配该呼叫到x的结果。
所以,你要实现你的什么c(4, 5, 6)[1] <- 10
的结果是:
> `[<-`(c(4, 5, 6),1, 10)
[1] 10 5 6
您可以进行修改,匿名函数,但没有分配给匿名载体。 即使[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 [<-