r - 使用 data.frame$column 的 R 函数不起作用
问题描述
以下两个功能目前不起作用,但是当我将它们全部写出来时起作用 - 不知道为什么。任何修复建议都会很棒。
change_specific_column_name <- function(data.frame,old_column_name,new_column_name){
names(data.frame)[names(data.frame) == old_column_name] <- new_column_name
}
change_specific_observations_name <- function(data.frame, column_name, old_obseration, new_observation){
data.frame$column_name[which(data.frame$column_name == old_obseration)] <- new_observation
}
test_frame <- data.frame(Does=1,This=2,Work=3)
change_specific_column_name(test_frame,"Work","Happen") # this doesn't change the name of the column
names(test_frame)[names(test_frame) == "Work"] <- "Happen" # writing out the function does change the name
解决方案
虽然不准确,但您可以将函数的参数视为按值传递,因此很明显对函数的形参所做的更改不会影响实际参数。
任何修复建议都会很棒。
如果你真的想要一个函数来修改它的参数,你可以使用一种技术,例如在 R 中通过引用调用;基本上只是将您的作业包装在eval.parent(substitute(…))
.
change_specific_column_name <- function(data.frame, old_column_name, new_column_name)
eval.parent(substitute(names(data.frame)[names(data.frame) == old_column_name] <- new_column_name))
推荐阅读
- python - pygame中的敌人
- proxy - Jmeter 代理设置(可能是旧主题)
- java - 无法从 START_OBJECT 令牌 String.class 中反序列化 java.lang.String 的实例
- node.js - 在nodejs中创建Amchart图的pdf
- javascript - 承诺所有重试
- sql - SQL Server - 如何保持 SQL int 列按数字顺序无间隙
- laravel - SQLSTATE [42S02]:未找到基表或视图:1146 表 'pk5.roles' 不存在
- java - How to remove the response body of an operation in Springfox Swagger?
- sql-server - 创建 SQL 内存表 Visual Studio
- ios - Cordova app on iPhone X adds black bar on top of app