R 将get()与替换函数一起使用
有人能给我解释一下为什么会出现下面的例子吗R 将get()与替换函数一起使用,r,function,syntax,base,replace,R,Function,Syntax,Base,Replace,有人能给我解释一下为什么会出现下面的例子吗 #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
#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
#创建简单数据帧
赋值(“df”,data.frame(P=runif(5),Q=runif(5),R=runif(5)))
#从给定的字符向量返回数据帧
获取(“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
#返回df的列名
colnames(get(“df”))
[1] “P”“Q”“R”
#但是使用替换函数。。。
colnames(get(“df”)以您在问题中演示的方式使用assign
在R中至少是不常见的。通常,您只需将所有对象放在一个列表中
因此,与其
for (i in 1:10) {
assign( paste( "Object" , i , sep = "." ) , rnorm(1000 , i) )}
你会的
objects <- list()
for (i in 1:10) {
objects[[i]] <- rnorm(1000 , i) }
然后,您可以访问,例如,第一个对象作为对象[[1]]
,并且有几个用于处理列表的函数。要理解为什么这不起作用,您需要了解什么是colnames对于您的特定问题,请尝试设置名称。总的来说,我不知道为什么它不起作用:我期待着阅读一个启发性的答案。不要使用assign
。将在循环中创建的所有对象放入列表中。很有可能你甚至不需要for
循环。我知道我可能不需要for
循环,这纯粹是方便。老实说,调用循环来创建对象的开销是最小的,<0.1秒,因此在这种情况下,我并没有严格地决定对所有内容进行矢量化。这是一个有用的方便构造,为懒惰的编码者提供了位置(加上我在不同对象的循环中做了一些其他重命名赋值,所以它真的很方便)。:挥手:求值,等等,:更多挥手:试试colnames@SimonO101我把你的观点转到罗兰身上,但在我看来,使用assign
和get
必须有一个真正令人信服的理由,而不是使用lappy
和使用列表的更像R的范例。我很想理解你为什么要避免使用列表。几乎是+1,如果你也添加lappy
版本,我会向上投票。+1lappy()
就是这个方法。它将简化代码,甚至可能比for循环更快,这仅仅是因为@Andrie@hadley抱歉,您的代码是正确的。我本应该写[@Andrie如果你想更准确的话,它真的是[非常感谢你对我的问题做出了清晰而简洁的解释。这正是我所希望的。@SimonO101稍微调整了一下以使其更准确。在(搜索“替换函数”)中有更多细节谢谢哈德利-我现在要去devtools了!
objects <- lapply(1:10, function(x) rnorm(1000,x))
copy <- x
colnames(copy) <- y
x <- copy
x <- `colnames<-`(x, y)
get("x") <- `colnames<-`(get("x"), y)
x <- 1
get("x") <- 2
# Error in get("x") <- 2 :
# target of assignment expands to non-language object