首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对R中的多个对象应用相同的函数(for-循环?)

对R中的多个对象应用相同的函数(for-循环?)
EN

Stack Overflow用户
提问于 2020-05-07 23:19:13
回答 3查看 222关注 0票数 1

我有一个包含不同数量数据的对象列表,我希望在这些数据上全局执行相同的round函数。是否有办法一次执行,同时保持对象独立(因此每个对象对应于它应该包含的数据),而不必手动执行,如下所示?

当尝试为每个对象手动迭代相同的函数时,我的代码

谢谢,凯蒂

Edit1:

代码语言:javascript
运行
复制
> D41
[1] 1.366 1.223 1.223 2.703 1.205 2.053
> d44
[1] 8.929 13.793
> D41r <- round(D41,2)
> d44r <- round(d44,2)
> D41r
[1] 1.37 1.22 1.22 2.70 1.21 2.05
> d44r
[1] 8.93 13.79

在这里,我只展示了更多对象中的两个对象,每个对象都有不同数量的数据。

是否有任何方法可以创建具有“不同行数”的数据框架,或者为每个对象相应地覆盖自己执行一个函数?

EN

回答 3

Stack Overflow用户

发布于 2020-05-08 00:28:44

R基解决方案:

代码语言:javascript
运行
复制
lapply(obj_list, function(x){if(length(grep("D\\d+", names(x))) > 0){round(x, 3)}else{x}})
票数 0
EN

Stack Overflow用户

发布于 2020-05-08 00:34:26

根据您的屏幕截图,问题似乎在于您的对象并不在您可以轻松处理的列表中,而只是作为值存储在您的全局环境(或.GlobalEnv)中。下面是使用ls()getElement的解决方案

代码语言:javascript
运行
复制
lapply(ls(), function(x) {
  new_value <- round(getElement(.GlobalEnv, x))
  assign(x, new_value, pos = .GlobalEnv) # re-assign its value to the rounded value
})

ls()将列出.GlobalEnv (您的全局环境)中的值和对象(所有内容)的名称。您可能需要使用grep来选择您想要的,这取决于里面还有什么。

使用getElement,您可以以字符串的形式提供对象的名称(这就是ls()将如何返回它们,并从它们存在的位置提取它们的值。因此,您对getElement的第一个参数是.GlobalEnv,对象所在的位置。第二个参数是对象的名称。如果然后要在全局环境中更改其值,则可以使用assign函数从本质上覆盖它,这类似地允许您将值的名称指定为字符串,如果对象只是驻留在全局环境中,则.GlobalEnv作为position参数。

票数 0
EN

Stack Overflow用户

发布于 2020-05-08 00:41:21

由于我无法获取您的数据结构,所以我构建了一个类似的结构:

代码语言:javascript
运行
复制
dfD <- data.frame(D = paste0("D", sample(14:64, 12)),
              Dval = rnorm(12, mean = 20))

R > dfD
     D     Dval
1  D25 20.90942
2  D53 21.51484
3  D59 18.11695
4  D44 20.29304
5  D57 19.51578
6  D22 21.72018
7  D16 20.62322
8  D31 21.97484
9  D18 19.26036
10 D61 22.08744
11 D37 19.36332
12 D55 20.67799

然后,我将所有的Dval舍入三位数:

代码语言:javascript
运行
复制
library(tidyverse)
dfd3 <-  dfD %>% 
 mutate(L3 = round(Dval, digits = 3))

dfd3
R> dfD
     D     Dval     L3
1  D25 20.90942 20.909
2  D53 21.51484 21.515
3  D59 18.11695 18.117
4  D44 20.29304 20.293
5  D57 19.51578 19.516
6  D22 21.72018 21.720
7  D16 20.62322 20.623
8  D31 21.97484 21.975
9  D18 19.26036 19.260
10 D61 22.08744 22.087
11 D37 19.36332 19.363
12 D55 20.67799 20.678

我想这就是你要找的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61669406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档