我希望根据不同的列来订购数据框,一个转弯.我有一个字符向量,其中的相关列名order应该基于:
parameter <- c("market_value_LOCAL", "ep", "book_price", "sales_price", "dividend_yield",
"beta", "TOTAL_RATING_SCORE", "ENVIRONMENT", "SOCIAL", "GOVERNANCE")
Run Code Online (Sandbox Code Playgroud)
我想循环遍历名称parameter并动态选择要用于order我的数据的列:
Q1_R1000_parameter <- Q1_R1000[order(Q1_R1000$parameter[X]), ]
Run Code Online (Sandbox Code Playgroud)
这里X是1:10(因为我有10个项目parameter).
为了使我的示例可重现,请考虑mtcars存储在字符向量中的数据集和一些变量名称cols.当我尝试mtcars使用动态子集选择变量时cols,以与上面(Q1_R1000$parameter[X])相似的方式,未选择该列:
cols <- c("cyl", "am")
mtcars$cols[1]
# NULL
Run Code Online (Sandbox Code Playgroud) 我知道,对于一个列表,使用基本运营商建立索引时,部分匹配完成$和[[.例如:
ll <- list(yy=1)
ll$y
[1] 1
Run Code Online (Sandbox Code Playgroud)
但我仍然是一个R新手,这对我来说是新的,函数参数的部分匹配:
h <- function(xx=2)xx
h(x=2)
[1] 2
Run Code Online (Sandbox Code Playgroud)
我想了解这是如何工作的.它背后的机制是什么?这有副作用吗?我想知道如果给出了xx参数,有人可以测试一下吗?
Andrie评论后编辑:
内部R使用pmatch算法来匹配参数,这里是一个如何工作的示例:
pmatch("me", c("mean", "median", "mode")) # error multiple partial matches
[1] NA
> pmatch("mo", c("mean", "median", "mode")) # mo match mode match here
[1] 3
Run Code Online (Sandbox Code Playgroud)
但为什么R有这样的功能呢?partial unique匹配背后的基本理念是什么?
R文档说
如果x是原子类型(或NULL),则is.atomic返回TRUE,否则返回FALSE.
如果x具有递归(类似列表)结构,则is.recursive返回TRUE,否则返回FALSE.
对于原子类型("逻辑","整数","数字","复杂","字符"和"原始")和NULL,is.atomic为true.
除了原子类型,NULL和符号(由as.name给出)之外,大多数类型的对象都被认为是递归的.
根据以上所述,我认为向量是一个递归对象,但两个函数显示相反.
函数(如c)也是递归对象
那么R 中递归对象和原子对象的定义是什么?