Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何修改函数中的参数?_R_Function - Fatal编程技术网

R 如何修改函数中的参数?

R 如何修改函数中的参数?,r,function,R,Function,我有一系列代码行,根据另一列的内容替换现有列的内容(即,我正在创建一个分类变量,其中“cut”函数不适用)。我是R新手,希望编写一个函数,在所有data.frames上执行此任务,而不必每次插入和自定义50行代码 X是数据帧,Y是分类变量,Z是另一个(字符串)变量。此代码适用于: X$Y <- "" X <- transform(X, Y=ifelse(Z=="Alameda",20,"")) ... (many more lines) 这两个函数都可以正常运行,但不会以任何方式更

我有一系列代码行,根据另一列的内容替换现有列的内容(即,我正在创建一个分类变量,其中“cut”函数不适用)。我是R新手,希望编写一个函数,在所有data.frames上执行此任务,而不必每次插入和自定义50行代码

X是数据帧,Y是分类变量,Z是另一个(字符串)变量。此代码适用于:

X$Y <- ""
X <- transform(X, Y=ifelse(Z=="Alameda",20,""))
... (many more lines)
这两个函数都可以正常运行,但不会以任何方式更改数据帧X。我在调用环境或在另一个函数中使用函数时是否做错了什么?这似乎是一个简单的问题,如果我还没有花5个多小时尝试学习,我就不会发帖了。提前谢谢

R对所有对象使用“按值调用”。只有返回值返回到调用环境。
你能行

ab <- function(X, Y, Z) { 
   X <- transform(X, Y=ifelse(Z=="Alameda",20,"")) 
   ... 
   return(X) 
}
下面是一个针对您的情况的示例:

ab <- function(X, Y, Z) { 
  X[, Y] <- ifelse(X[,Z]>12,20,99) 
  # ... 
  X ### <<<<< last expression
}
B <- BOD # BOD is one of the dataframes which come with R
ab(B, "loc", "demand")
abR对所有对象使用“按值调用”。只有返回值返回到调用环境。
你能行

ab <- function(X, Y, Z) { 
   X <- transform(X, Y=ifelse(Z=="Alameda",20,"")) 
   ... 
   return(X) 
}
下面是一个针对您的情况的示例:

ab <- function(X, Y, Z) { 
  X[, Y] <- ifelse(X[,Z]>12,20,99) 
  # ... 
  X ### <<<<< last expression
}
B <- BOD # BOD is one of the dataframes which come with R
ab(B, "loc", "demand")

ab R对所有对象使用“按值调用”。只有返回值返回到调用环境。请提供有关数据帧的更多信息以及如何调用函数,即编辑您的问题:R对所有对象使用“按值调用”。只有返回值返回到调用环境。请提供更多关于您的数据框以及您希望如何调用该函数的信息,即编辑您的问题:不幸的是,链接问题中的高投票率答案确实非常愚蠢,并且提供了明显不好的建议。除非需要,否则不要在R中使用
return
。@KonradRudolph好的,你有什么建议吗?我现在编辑答案以删除问题的链接。你的答案是正确的。我刚开始对那些故意主张忽略R是函数式编程语言这一事实的人产生了反感,他们说我们应该把它当作命令式语言来对待,还有一些缺点等等。这对那些不太了解的人来说没关系。但如果人们鼓吹这一点,就会导致无知和糟糕的编程实践泛滥。你的答案不是这样!但是你链接到的线程中的答案是。非常感谢你的帮助!我尝试了上面的两个函数,当我提交ab(d.f,loc,country)时,得到的响应是:“ifelse中的错误(z==“Alameda”,20,”):未找到对象“country”。变量'county'是d.f.中的一列。我尝试了不同的引用方法,但没有找到解决方案@KonradRudolph我认为使用
return
语句没有什么错,特别是在某些情况下。请围绕此主题进行讨论。从本质上讲,R是一种函数式语言,但在某些情况下,您可以使用命令式风格进行有效编程。我并不完全同意功能性和命令性之间的二分法。不幸的是,在相关问题中投票率很高的答案真的很愚蠢,并且提供了明显不好的建议。除非需要,否则不要在R中使用
return
。@KonradRudolph好的,你有什么建议吗?我现在编辑答案以删除问题的链接。你的答案是正确的。我刚开始对那些故意主张忽略R是函数式编程语言这一事实的人产生了反感,他们说我们应该把它当作命令式语言来对待,还有一些缺点等等。这对那些不太了解的人来说没关系。但如果人们鼓吹这一点,就会导致无知和糟糕的编程实践泛滥。你的答案不是这样!但是你链接到的线程中的答案是。非常感谢你的帮助!我尝试了上面的两个函数,当我提交ab(d.f,loc,country)时,得到的响应是:“ifelse中的错误(z==“Alameda”,20,”):未找到对象“country”。变量'county'是d.f.中的一列。我尝试了不同的引用方法,但没有找到解决方案@KonradRudolph我认为使用
return
语句没有什么错,特别是在某些情况下。请围绕此主题进行讨论。从本质上讲,R是一种函数式语言,但在某些情况下,您可以使用命令式风格进行有效编程。功能性和命令性之间的二分法我并不完全同意。
ab <- function(X, Y, Z) { 
  X[, Y] <- ifelse(X[,Z]>12,20,99) 
  # ... 
  X ### <<<<< last expression
}
B <- BOD # BOD is one of the dataframes which come with R
ab(B, "loc", "demand")