【发布时间】:2019-10-19 23:37:37
【问题描述】:
我正在努力在我构造的函数上使用 mapply,因为我在更大的环境中编程,所以我需要一个或多个参数,例如,如果我编写一个参数之一是 data 的函数.
fun_test <- function(data,col,val1,val2){return(data[col][1,] * val1-val2)}
所以 data 和 col 例如可以是常数,但我想根据 val1 和 改变函数的输出>val2:
> mapply(FUN=fun_test,mtcars,"cyl",mtcars$cyl,mtcars$cyl*2)
Error in data[col][1, ] : incorrect number of dimensions
我正在尝试了解 mapply 的工作原理;我肯定不能通过 mtcars 和“cyl”作为向量,可以吗?
编辑:我有一个数据可能会发生变化的环境,例如有时我使用 mtcars,有时它是另一个数据集。所以我无法将数据硬编码到函数中
EDIT2: 1)我有一些数据集, 2) 我有不同的 Excel 文件读入 R, 3)我做了一个查找函数,从R中的这些Excel文件中提取信息, 4) 当我进入我创建的查找函数并提取信息时,对于一个或两个变量(来自数据集)。
因此,这些查找函数取决于数据(我需要查找的变量)和用于查找的 Excel 文件。
【问题讨论】:
-
@akrun:你确定这是重复的吗?我很难看到这对我有什么帮助。
-
Map是mapply的包装我猜问题是其中一个参数是一个常数。所以你需要把它包装在一个列表中,这是欺骗链接中提供的解决方案。如果您不同意,我可以重新打开 -
@akrun:我明白了,也许我写“常数”时太模糊了。我的意思是参数不会改变,但常量参数本身不是常量,而是我的数据。
-
我的意思是每个列表元素都重复数据或输入。这就是您使用
mapply(FUN=fun_test, list(mtcars),"cyl",mtcars$cyl,mtcars$cyl*2)回答的原因,其中数据包装在list -
@akrun:感谢您的详细说明! Tbh,我不明白它们是相关的,我在提问之前阅读了那个答案,但如果你想关闭它,我理解