Sim*_*lon 10 syntax replace r function base
任何人都可以向我解释为什么会出现以下示例?
#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
Run Code Online (Sandbox Code Playgroud)
我倒是
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这些对象的名称(或).
谢谢!
had*_*ley 16
要理解为什么这不起作用,你需要了解colnames<-它的作用.就像它中的每个函数看起来都在修改一个对象一样,它实际上是在修改一个副本,所以从概念上colnames(x) <- y扩展到:
copy <- x
colnames(copy) <- y
x <- copy
Run Code Online (Sandbox Code Playgroud)
如果你以通常的方式调用替换运算符,可以写得更紧凑一点:
x <- `colnames<-`(x, y)
Run Code Online (Sandbox Code Playgroud)
你的榜样就变成了
get("x") <- `colnames<-`(get("x"), y)
Run Code Online (Sandbox Code Playgroud)
右边是有效的R,但是整个命令不是,因为你不能为函数的结果赋值:
x <- 1
get("x") <- 2
# Error in get("x") <- 2 :
# target of assignment expands to non-language object
Run Code Online (Sandbox Code Playgroud)
以assign你在问题中演示的方式使用在R中至少是不常见的.通常你只需将所有对象放在一个列表中.
所以,而不是
for (i in 1:10) {
assign( paste( "Object" , i , sep = "." ) , rnorm(1000 , i) )}
Run Code Online (Sandbox Code Playgroud)
你会的
objects <- list()
for (i in 1:10) {
objects[[i]] <- rnorm(1000 , i) }
Run Code Online (Sandbox Code Playgroud)
事实上,这个结构很常见,有一个(优化的)函数(lapply),它做了类似的事情:
objects <- lapply(1:10, function(x) rnorm(1000,x))
Run Code Online (Sandbox Code Playgroud)
然后,您可以访问例如第一个对象,objects[[1]]并且有几个用于处理列表的函数.
| 归档时间: |
|
| 查看次数: |
1066 次 |
| 最近记录: |