R语言的作业

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')赋值.

这正是文档?"<-"所说的:

描述:

 Assign a value to a name.
Run Code Online (Sandbox Code Playgroud)

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*用作对象名称,因为它会在下次调用时覆盖[<-