将R中数量不确定的参数传递给order()函数
据我所知,R中的order函数可用于按数据帧/矩阵的一列或多列对该对象的行进行排序。列作为单独的参数传递给order,order可以处理数量可变的参数 我想按数据框的所有列对其进行排序,但我事先不知道数据框中的名称或列数。在Python中,可以将对象列表解压为函数的参数(例如,将R中数量不确定的参数传递给order()函数,r,sorting,R,Sorting,据我所知,R中的order函数可用于按数据帧/矩阵的一列或多列对该对象的行进行排序。列作为单独的参数传递给order,order可以处理数量可变的参数 我想按数据框的所有列对其进行排序,但我事先不知道数据框中的名称或列数。在Python中,可以将对象列表解压为函数的参数(例如,zip(*mylist)iszip(mylist[0]、mylist[1]等))。在R中有类似的方法吗?当我调用order时,最好将矩阵的列“解包” 在R中,除了传递任意数量的参数外,还有其他方法可以按多个列进行排序吗 更
zip(*mylist)
iszip(mylist[0]、mylist[1]等)
)。在R中有类似的方法吗?当我调用order时,最好将矩阵的列“解包”
在R中,除了传递任意数量的参数外,还有其他方法可以按多个列进行排序吗
更多想法:
似乎我不能将多个未命名的项目打包成一个对象来传递给order。我也想不到使用for循环、apply或do.call生成任意数量的对象的方法。这里有些东西:
或者。。。我是否应该编写一个for循环来调用每一列的order,从优先级最低的一列开始,以第一个order参数的列结束,每次对行重新排序,并确保order排序稳定
谢谢。在python中调用
fun(*args,**kwargs)
指定位置参数(*args
)和按名称匹配的参数(kwargs
)的列表
R中类似的调用是do.call(fun,arglist)
。与python不同,您不能混合使用常规参数和特殊参数(例如fun(a=1,*args)
),而do.call的第二个参数可以包含按名称或位置匹配的元素(例如do.call(fun,list(2,x=3))
)
为了完成该示例,由于data.frames继承自列表,您只需调用“order(df)”即可按顺序对所有列进行排序(只要data.frames中的字段名称都不匹配order“na.last”和“discreating”的形式参数)请查看example(order)
。在R中有很多有用的例子,zip(*mylist)
将是do.call(“zip”,mylist)
我写问题时不太理解do.call的用法,所以谢谢。在示例(order)中,有一个成语解决了我的问题:df[do.call(order,df),]