在外部定义的函数上使用 lapply

2023-12-06

这个问题与R - 将固定列传递给 data.table 中的 lapply 函数 and 按组和列的加权平均值,但又有些不同。

我希望有一个固定列与同一列中的所有其他列进行交互data.table。一个简单的例子来说明:

DT <- data.table(y = rnorm(10), x1 = rnorm(10), x2 = rnorm(10))
DT[, lapply(c('x1', 'x2'), function(x) get(x) * y)]

现在假设该操作比乘法复杂得多,因此我想在范围之外定义一个独立的函数data.table:

fun <- function(x) {
    return(get(x) * y)
}
DT[, lapply(c('x1', 'x2'), fun)]
Error in get(x) : object 'x1' not found

显然,变量作用域存在问题,因为函数在外部定义data.table看不到里面的变量。有没有什么巧妙的技巧可以在外部定义函数data.table并且仍然可以使用lapply?


如果你试图通过字符串和命名变量来组合引用,你就会陷入困境。 (也可以通过引用函数内的“全局”变量)

最简单的方法是定义在哪里get在寻找x, (and y)

这是重写的函数,以便您可以告诉它要查找的位置。

fun <- function(x,y,wherex=parent.frame(),wherey=parent.frame()) {
    return(get(x,wherex) * get(y,wherey))
}

data.table检查中存在的名称j,并且仅加载所需的列。

在您的示例中,您不使用列名称,因此没有任何可用的内容。

如果你包括.SD在表达式中j,它将加载到所有列中。您可以使用.SD as the wherex/wherey新定义的参数fun

DT[, lapply(c('x1', 'x2'), fun, y = 'y' , wherex=.SD, wherey=.SD)]
 #              V1         V2
 #  1: -0.27871200  1.1943170
 #  2: -0.68843421 -1.5719016
 #  3:  1.06968681  2.8358612
 #  4:  0.21201412  1.0127712
 #  5:  0.05392450  0.2487873
 #  6:  0.04473767 -0.1644542
 #  7:  5.37851536  2.9710708
 #  8:  0.23653388  0.9506559
 #  9:  1.96364756 -1.4662968
 # 10: -0.02458077 -0.1197023

请注意,您实际上并不需要将其包含在[.data.table

results <- setDT(lapply(c('x1','x2'), fun, y='y', wherex=DT,wherey=DT))

将返回相同的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在外部定义的函数上使用 lapply 的相关文章

  • 在 ggplot2 中对多个变量进行排序

    我正在尝试将变量分组并按降序排序 mydf region airport value MIA FLL 0 244587909 MIA PBI 0 824144687 MIA MIA 0 484907626 NYC EWR 0 7310755
  • 用 R 计算月回报

    这可能是一个微不足道的问题 但不幸的是我无法解决它 我有 50 家公司的股票投资组合 我有每家公司当天的日期和收盘价 每家公司的数据因股票交易日期而异 我使用以下代码来计算每日收益 return matrix NA nrow compani
  • 合并数据后,ggplot2 geom_polygon 的映射变得疯狂

    我正在尝试制作一个包含美国大区域地图的网格 我从形状文件创建一个 SpatialPolygonDataframe 然后将其转换为data frame以使用ggplot2 一旦我将数据添加到框架中 多边形就会绘制出来 包含 SpatialPo
  • Plotly legendgroup 用于子图,以便单个图例控制所有图表

    我在用着plotly in r生成许多 子图 下面显示了一个玩具示例 library shiny library dplyr library plotly Toy Example ui lt fluidPage h3 Diamonds pl
  • PowerBI:如何保存R脚本的结果?

    是否可以在 Power BI Desktop 中实现以下场景 将数据从 Excel 文件加载到多个表 使用 R 脚本从多个数据源进行计算 将计算结果存储到 Power BI pbix 中的新表 这个想法是使用 Power BI Deskto
  • Eclipse 和 R 中的 StatET

    我已经成功地将 StatET 安装到 eclipse 中 并且我有一个名为 Test 的 Java 项目 其中包含一些代码 我希望能够在该项目文件夹中保留 R 文件并将其作为独立的 R 脚本运行 与 Java 程序分开 我怎样才能做到这一点
  • R:如何跨行应用xts对象?

    我有以下 xts 对象 x lt structure c 30440 5 30441 30441 5 30441 5 30441 30439 5 30440 5 30441 30441 5 NA NA 30439 5 NA NA NA 30
  • 如何更改现已弃用的 dplyr::funs() (其中包含 ifelse 参数)?

    非常基本 但我认为我并没有真正理解这一变化 library dplyr library lubridate Lab import sql lt Lab import gt select if sum is na gt 0 gt mutate
  • 如何有效地将多个 rgl 图连接成一个图?

    我用以下命令制作了 3D 绘图rgl打包我的数据的每个因子级别并将它们保存为 png 我的数据有 30 个不同的级别 从而产生了 30 个不同的图像文件 现在我想将这些 png 合并成一个图 我会这样显示它们 下面的例子说明了我想做的事情
  • 如何在ggplot2中制作x轴和y轴之间的间隙和突出的刻度线

    如何创建以下样式的图表 注意 x y 轴 红色圆圈 和 x y 轴上突出的刻度 箭头 之间的间隙 我现在最多能做的是 library ggplot2 p lt ggplot mpg aes class hwy geom boxplot th
  • r 选择数据框中某个值以下和之后的值

    我有一个问题如何从表中选择某些值 我有一个包含时间和值的表 我想在特定时间之后获取下面的行 示例 Data Frame Time Value 02 51 0 08033405 05 30 0 43456738 09 45 0 3605207
  • 在 ggduo 散点图矩阵中显示相关指数

    我有这样的事情 library GGally df data frame runif 100 rnorm 100 rgamma 100 1 2 rt 100 1 rf 100 1 2 ggduo df columnsX 1 2 column
  • 在 R 中使用 k-NN 和分类值

    我希望对主要具有分类特征的数据进行分类 为此 欧几里得距离 或任何其他数值假设距离 不适合 我正在寻找 R 的 kNN 实现 其中可以选择不同的距离方法 例如汉明距离 有没有一种方法可以使用常见的 kNN 实现 例如具有不同距离度量函数的
  • Shiny:如何在数据表中显示条形图

    我想在数据表中显示条形图 这link http jsfiddle net annoyingmouse em27yod1 显示我想使用 javascript 做什么 我不了解 javascript 或 html 所以你能告诉我是否可以使用闪亮
  • 按列名合并 3 个 data.frames

    我有3个独立的data frames 他们三个data frames具有相同的列数和相同的行数 此外 它们具有相同的列名称 我正在尝试根据列名称合并三个 data frames 我使用下面的代码来合并两个 data frames 并返回匹配
  • 如何在 R 中建立具有某些条件的排列[重复]

    这个问题在这里已经有答案了 我是 R 新手 有点困惑 假设我有一个向量 c 1 2 3 4 5 6 我想生成具有四个元素的排列 每个排列应涉及 1 和 5 谢谢 您可以使用permutations https www rdocumentat
  • 更改 geom_text 的默认“a”图例以标记字符串本身

    类似于这个问题 https stackoverflow com questions 18337653 remove a from legend when using aesthetics and geom text 我想更改图例中的默认 a
  • 如何在 ggplot2 图中有两个源标题? [复制]

    这个问题在这里已经有答案了 我正在尝试在 ggplot2 图中添加第二个标题 与这位经济学家制作此图的方式类似 这是我制作的一个基本图 我知道如何在右下角添加一个标题 但如何在左下角添加另一个标题 ggplot mtcars aes mpg
  • 如何在 bookdown 定理或示例环境中使用内联 R 代码

    我使用 bookdown 生成 html 和 PDF 文档 如何在定理和示例环境中使用内联 R 代码的结果 这是我尝试过的 title Test output bookdown pdf book toc false html documen
  • 连接极线ggplot图中的间隙

    当 ggplot 使用极坐标绘制线图时 它会在最高和最低 x 值之间留下间隙 Dec and Jan如下 而不是缠绕成螺旋状 我怎样才能继续这条线并缩小差距 特别是 我想使用月份作为 x 轴 但在一条循环线上绘制多年的数据 Reprex l

随机推荐

  • 自动为 Woocommerce 上购买的产品设置特定属性术语值

    我想在下订单并处于 暂停 状态时自动向订购的产品添加特定的属性值 之前设置 我销售独特的产品 并且我设置了 STOCK 属性和 Out Of Stock 缺货 值 当下订单并处于 暂停 状态时 我想自动更改订购产品的特色状态 并向其添加缺货
  • WCF 捕获异常“服务器未提供有意义的回复..”

    服务器调用后 我的客户端捕获异常并显示以下消息 服务器没有提供有意义的回复 这可能是由合同不匹配 会话过早关闭或内部服务器错误引起的 另外 请注意我尝试了配置WCF 服务器没有提供有意义的回复 但还是没用 请注意 我将服务调试到最后 并且数
  • Spring Boot 2:动态刷新属性不起作用

    我已经按照这个官方教程进行操作了入门集中配置使用 Spring Boot 2 0 0 RELEASE 和 Spring Cloud Finchley M8 但动态刷新属性 无需重新启动 不起作用 经过一些调试 我注意到在ContextRef
  • 使用 Backbone.js 的投票系统

    我有一个Book具有属性的模型upVotes Book可以从数据库 MongoDB 查询 修改实例 然后保存 如果用户对一本书进行投票 我会更新upVotes计数 并将整个模型保存回服务器 问题是 如果其他人在实例加载时间和保存实例时间之间
  • spring:escapeBody 导致无效的 JSON

    我试图转义 JSP 中的字符串以在 AJAX 调用上返回有效的 JSON 但是 spring escapeBody 标记未正确转义 JSON 的单引号 有效的 JSON 不应转义单引号 status success body
  • Spring数据中的@Transient不起作用

    I have Settlement entity Entity Table name settlement public class Settlement ManyToOne JoinColumn name subscription x p
  • 使用 Elmah 记录 WCF Web 服务的用户名

    我们正在使用描述的方法here使用 Elmah 记录我们的 Web 服务错误 这确实有效 但遗憾的是记录的用户名是空的 我们做了一些调试 发现在 ErrorHandler 中记录错误时HttpContext Current User具有正确
  • Windows Phone ApplicationBar BackgroundColor 属性样式 XamlParseException

    我的应用程序中有很多页面 我决定在 App Resources 中创建一个全局 ApplicationBar 样式 然而 当我尝试启动应用程序时 VS 给了我一个错误 The property BackgroundColor was not
  • 在 PHP 安装上启用 Mcrypt

    我使用 Apache 2 2 16 在 Windows 机器上安装了 PHP 5 2 14 通过 msi 安装 安装附带了 ext php mcrypt dll 和 libmcrypt dll 但当我取消注释时扩展名 php mcrypt
  • Sql PIVOT 和字符串连接聚合

    我想使用数据透视 SQL 查询来构造一个结果表 其中连接文本作为数据透视表的数据部分中的结果 即我使用简单的选择得到以下结果 Event Name Resource Type Resource Name Event 1 Resource T
  • web.xml 中使用 CharacterEncodingFilter 进行 Spring 编码

    stackoverflow com 上的编码 我的网站上的编码
  • 将 JXTable 与 RXTable 组合

    Problem 我想要的能力JXTable与 编辑时全选 行为RXTable 进行简单的覆盖就可以了 但是 RXTable 的双击功能不适用于 JXTable 当使用 按钮操作 模式时 这很好 但是当使用 F2 或双击 JXTable 中的
  • 为什么函数的地址会随着每次运行而改变?

    我正在努力将地址映射到其符号以进行调试 获取调用堆栈 MS dbghelp dll 可以从地址中识别符号 请参阅SymFromAddr MSDN 然而 它不起作用 我想知道这是如何工作的 因为地址似乎随着程序的每次运行而改变 include
  • 如何解释 CPU 窗口反汇编窗格中的列?

    There is a tool called the CPU window which I get pressing Ctrl Alt C that shows the disassembly of my code 内存地址左边的绿色箭头表
  • 突出显示和过滤 (gcc) 编译器消息

    我目前正在重构一个 C 项目 向我抛出大约 1000 个警告 有没有办法突出显示和过滤这些警告 例如 将所有索引警告设置为红色 未使用的警告设置为蓝色 以及其他一些警告 很可能有些IDE可以做到这一点 但这对我来说不是解决方案 This i
  • 找不到模块“minizlib”

    我对 React Native 还很陌生 我使用下面的代码在我的 Mac 上安装 React Native npm install react native g react native cli 我收到错误 npm ERR code MOD
  • 现代 Android 中的非合作 Thread.stop() 替代方案

    Thread stop 现已从现代 Android API 中删除 从https developer android com reference java lang Thread stop 用途广泛 of stop应替换为仅修改某些变量以指
  • 为什么 `i = ++i + 1` 是未指定的行为?

    请考虑以下 C 标准 ISO IEC 14882 2003 E 引文 第 5 节第 4 段 除非另有说明 顺序 个别操作数的评估 个体的运算符和子表达式 表达式和顺序 发生哪些副作用 是 未指定 53 之前之间 下一个序列指向标量 对象应有
  • Android 有没有好的图表库?

    我需要在我正在开发的 Android 应用程序中渲染和显示图表 目前是条形图 但以后可能需要更多类型 我环顾四周 似乎还没有任何真正优秀 成熟的 Android 图表库 你知道任何 编辑以添加一些要求的详细信息 条形图 水平条形图 双堆叠条
  • 在外部定义的函数上使用 lapply

    这个问题与R 将固定列传递给 data table 中的 lapply 函数 and 按组和列的加权平均值 但又有些不同 我希望有一个固定列与同一列中的所有其他列进行交互data table 一个简单的例子来说明 DT lt data ta