Sve*_*ger 14 r variable-assignment
我想知道如何在R语言中进行赋值.
考虑以下R shell会话:
> x <- c(5, 6, 7)
> x[1] <- 10
> x
[1] 10 6 7
>
Run Code Online (Sandbox Code Playgroud)
我完全理解.创建向量(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
>
Run Code Online (Sandbox Code Playgroud)
或者在这里:
> f <- function() c(4, 5, 6)
> f()[1] <- 10
Error in f()[1] <- 10 : invalid (NULL) left side of assignment
>
Run Code Online (Sandbox Code Playgroud)
在我看来,只能为命名数据结构(如'x')赋值.
我问的原因是因为我试图实现R语言核心,我不确定如何处理这样的任务.
提前致谢
Jos*_*ich 16
在我看来,只能为命名数据结构(如'x')赋值.
这正是文档?"<-"所说的:
描述:
Run Code Online (Sandbox Code Playgroud)Assign a value to a name.
x[1] <- 10不使用相同的功能x <- c(5, 6, 7).前者呼叫,[<-而后者呼叫<-.
Ari*_*man 15
根据@ Owen对这个问题的回答,x[1] <- 10实际上是做了两件事.它正在调用该[<-函数,并将该调用的结果赋给x.
那么你想要达到的c(4, 5, 6)[1] <- 10结果是:
> `[<-`(c(4, 5, 6),1, 10)
[1] 10 5 6
Run Code Online (Sandbox Code Playgroud)
42-*_*42- 14
您可以对匿名函数进行修改,但是没有对匿名向量的赋值.即使R创建带有名称的临时副本,您有时也会看到反映该事实的错误消息.您可以在第21页的R语言定义中阅读此内容,其中它处理"子集赋值"的表达式评估以及其他分配形式:
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*`)
Run Code Online (Sandbox Code Playgroud)
并且有一个警告不要*tmp*用作对象名称,因为它会在下次调用时覆盖[<-