gpt4 book ai didi

r - 使用带有替换函数的 get()

转载 作者:行者123 更新时间:2023-12-04 01:33:51 24 4
gpt4 key购买 nike

谁能向我解释为什么会出现以下示例?

#Create simple dataframe
assign( "df" , data.frame( P = runif(5) , Q = runif(5) , R = runif(5) ) )

#Return the dataframe from the given character vector
get( "df" )
P Q R
1 0.17396222 0.90994676 0.90590685
2 0.33860092 0.98078739 0.38058921
3 0.80751402 0.93229290 0.82853094
4 0.05460417 0.55448507 0.01605027
5 0.04250316 0.03808318 0.40678270

#Return the column names of df
colnames( get( "df" ) )
[1] "P" "Q" "R"

#But using a replacement function...
colnames( get( "df" ) ) <- c( "S" , "T" , "U" )
Error in colnames(get("df")) <- c("S", "T", "U") :
target of assignment expands to non-language object

我会
A) 想知道为什么 get() 替换函数不能以这种方式工作?

b) 考虑到我在下面概述的问题,是否有办法解决此问题;

我的问题是我有很多对象,在循环中创建(使用玩具示例),如下所示: assign( paste( "Object" , i , sep = "." ) , rnorm(1000 , i) ) ,其中 i是一个向量,比如 i <- 1:1000然后我希望能够为循环中的每个对象分配名称(例如来自不同的向量),但是 names( get( paste( "Object" , i , sep = "." ) ) <- someNewName不像上面的例子那样工作。

但是 get( paste( "Object" , i , sep = "." ) )确实返回这些对象的名称(或 NULL )。

谢谢!

最佳答案

要了解为什么这不起作用,您需要了解 colnames<-确实。就像里面的每个函数看起来都在修改一个对象,实际上它在修改一个副本,所以从概念上讲 colnames(x) <- y扩展为:

copy <- x
colnames(copy) <- y
x <- copy

如果您以通常的方式调用替换运算符,则可以更紧凑地编写:
x <- `colnames<-`(x, y)

所以你的例子变成
get("x") <- `colnames<-`(get("x"), y)

右边是有效的 R,但整个命令不是,因为你不能给函数的结果赋值:
x <- 1
get("x") <- 2
# Error in get("x") <- 2 :
# target of assignment expands to non-language object

关于r - 使用带有替换函数的 get(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14464442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com