是否可以动态创建新的变量名称?
我想将列表中的数据帧读入最后带数字的新变量.像orca1,orca2,orca3 ......
如果我尝试类似的东西
paste("orca",i,sep="")=list_name[[i]]
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
target of assignment expands to non-language object
Run Code Online (Sandbox Code Playgroud)
还有另一种方法吗?
见下文:
paste("perf.a", "1", sep="")
[1] "perf.a1"
Run Code Online (Sandbox Code Playgroud)
如果我想分配值perf.a1怎么办?
我尝试了as.name,as.symbol等等,但无济于事:
as.name(paste("perf.a", "1", sep="")) = 5
Error in as.name(paste("perf.a", "1", sep = "")) = 5 :
target of assignment expands to non-language object
as.symbol(paste("perf.a", "1", sep="")) = 5
Error in as.symbol(paste("perf.a", "1", sep = "")) = 5 :
target of assignment expands to non-language object
noquote(paste("perf.a", "1", sep="")) = 5
Error in noquote(paste("perf.a", "1", sep = "")) = 5 :
target of assignment expands to non-language object
Run Code Online (Sandbox Code Playgroud) 我想知道如何在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语言核心,我不确定如何处理这样的任务.
提前致谢
任何人都可以向我解释为什么会出现以下示例?
#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" ) ) …Run Code Online (Sandbox Code Playgroud) 我想做的是使用dplyr :: filter创建一些新的数据帧,以将数据从一个巨大的数据帧中分离为一堆较小的数据帧。
对于可重现的基本案例沼泽简单示例,我使用了以下示例:
filter(mtcars, cyl == 4)
Run Code Online (Sandbox Code Playgroud)
我知道我需要将其分配给它自己的数据框,因此我从以下内容开始:
paste("Cylinders:", x, sep = "") <- filter(mtcars, cyl == 4))
Run Code Online (Sandbox Code Playgroud)
那没有用-它给了我在这里发现的错误:赋值扩展为非语言对象
从那里,我发现了这一点:在R中使用粘贴创建变量名
(也是上述作者的大事)
这使我想到了这一点,它起作用了:
assign(paste("gears_cars_cylinders", 4, sep = "_"), filter(mtcars, cyl == 4)) %>%
group_by(gear) %>%
summarise(number_of_cars = n())
Run Code Online (Sandbox Code Playgroud)
通过“工作”,我的意思是我得到一个名为gears_cars_cylinders_4的数据框,其中包含来自
filter(mtcars, cyl == 4) %>%
group_by(gear) %>%
summarise(number_of_cars = n())
Run Code Online (Sandbox Code Playgroud)
但最终,我认为我需要将整个东西包装到一个函数中,并能够将其的柱面数提供给它mtcars$cyl。我在想什么plyr::ldply(mtcars$cyl, function_name)?
在我的实际数据中,我需要分解大约70个不同的类,以分成单独的数据框,然后放入DT::datatableShiny中的选项卡,这真是一团糟。无论如何。
当我尝试这个:
function_name <- function(x){
assign(paste("gears_cars_cylinders", x, sep = "_"), filter(mtcars, cyl == x)) %>%
group_by(gear) %>%
summarise(number_of_cars …Run Code Online (Sandbox Code Playgroud)