r - 使函数在 R 中的赋值运算符的 LHS 上工作
问题描述
似乎我应该知道这个问题的答案,但我不知道。如何编写一个可以在赋值运算符左侧工作的函数?例如,在下面的示例中,我如何创建一个调用的函数my.rownames
,我可以将其放在 LHS 上<-
以分配rownames
给foo
.
# get rownames and change them
foo <- rownames(mtcars)
foo <- paste("x",foo)
# put altered rownames back
rownames(mtcars) <- foo
# create a new function my.rownames
my.rownames <- rownames
# works
my.rownames(mtcars)
# doesn't work
my.rownames(mtcars) <- foo
解决方案
根据?rownames
row.names 返回一个字符向量。
row.names<- 返回行名称更改的数据框。
`my.rownames<-` <- `rownames<-`
还,
有用于获取和设置行名的通用函数,以及数组的默认方法。这里的描述是针对 data.frame 方法的。
.rowNamesDF<-
是一个(非通用替换)函数,用于设置数据帧的行名,带有额外的参数 make.names。此功能仅作为解决方法存在,因为我们无法在不破坏现有包中的遗留代码的情况下轻松更改 row.names<- generic。
它应该工作
data(mtcars)
my.rownames(mtcars) <- foo
head(mtcars)
# mpg cyl disp hp drat wt qsec vs am gear carb
#x Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#x Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#x Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#x Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#x Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#x Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
推荐阅读
- excel - 引用 ListObjects 和 ListColumns 时 Excel 停止工作
- build - 使用 make 构建后 GNU coreutils 二进制文件在哪里?
- python - 在python中插入有界像素
- ios - Swift 闭包:无法将类型“()”的返回表达式转换为返回类型“LiveSearchResponse?”
- perl - 基于位置/偏移的替换
- mysql - MySQL中不精确的乘法文本/整数
- python - 使用 PySpark 连接速度很慢
- bash - 如何用 sed 替换第一个匹配文本块?
- html - 如何使用文本制作响应式背景
- javascript - 如何在单击时淡出 1 张图片并自动淡入 4 张彼此靠近的图片?