楼主: liuqiang0704
4165 9

[问答] 请教一个在function中数据读取的问题 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1份资源

硕士生

64%

还不是VIP/贵宾

-

威望
0
论坛币
28 个
通用积分
34.3151
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
3063 点
帖子
46
精华
0
在线时间
291 小时
注册时间
2015-8-18
最后登录
2025-6-23

楼主
liuqiang0704 发表于 2022-3-18 11:27:16 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位大佬,有个问题困扰小弟我好久了,想请教一下大家,假设有一个数据
  1. data<-ggplot2::mpg    bc<-data
复制代码
manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class  
  <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>  
1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compact
2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compact
3 audi         a4      2    2008     4 manual(m6) f        20    31 p     compact
4 audi         a4      2    2008     4 auto(av)   f        21    30 p     compact
5 audi         a4      2.8  1999     6 auto(l5)   f        16    26 p     compact
6 audi         a4      2.8  1999     6 manual(m5) f        18    26 p     compact

假设我想给它求一个中位数值
  1. newcode<-median(subset(bc$hwy,bc$class=="compact"))
复制代码
这个代码在外部运行得很好
可是做成程序就运行不了了 微信图片_20220318115053.png




试了好多方法都不行,请教各位这是什么问题呀?论坛帖子太难编辑了,我上传了一个Word,麻烦大佬们耐烦看看,不胜感激。 function问题.docx (54.65 KB)










二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:function 数据读取 TIO Fun CTI

回帖推荐

橙红的果士 发表于2楼  查看完整内容

datamedian

沙发
橙红的果士 学生认证  发表于 2022-3-18 14:59:39
datamedian<-function(data=bc, x=hwy, group=class){
    attach(data)
    newcode <- median(subset(x, group=="compact"))
    return(newcode)
}
datamedian(data=bc, x=hwy, group=class)
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

藤椅
liuqiang0704 发表于 2022-3-18 15:40:26
橙红的果士 发表于 2022-3-18 14:59
datamedian
完美解决了,我想问一下,我没做出来是因为function(data=bc, x=hwy, group=class)这里没标注好对吗?能不能说下 原因让我也提高一下

板凳
橙红的果士 学生认证  发表于 2022-3-21 08:45:12
不是,那里只是设置了默认值,也可以不给定默认值,关键在于newcode <- median(subset(x, group=="compact"))这个地方的替换,类似于文本替换

报纸
橙红的果士 学生认证  发表于 2022-3-21 08:47:12
datamedian<-function(data, x, group){
    attach(data)
    newcode <- median(subset(x, group=="compact"))
    return(newcode)
}
datamedian(bc, hwy, class)
这样也行。关键在于函数的主体,不在于参数是否给定初始值。

地板
liuqiang0704 发表于 2022-3-31 09:19:34
橙红的果士 发表于 2022-3-21 08:47
datamedian
不好意思,又打扰了,想问下假设如果不要 attach(data)这个句,本段代码还能实现吗?像这样?
datamedian<-function(data, x, group){
  newcode <- median(subset(data$x, group=="compact"))
  return(newcode)
}
弄了好久都没成功

7
橙红的果士 学生认证  发表于 2022-3-31 15:21:14
liuqiang0704 发表于 2022-3-31 09:19
不好意思,又打扰了,想问下假设如果不要 attach(data)这个句,本段代码还能实现吗?像这样?
datamedia ...
可以的啊,attach只是将数据集放到全局中去,指定数据集中的变量时不需要指定数据集,不要这句是可以的呀
rm(list=ls())
datamedian<-function(data, x, group){
    # attach(data)
    newcode <- median(subset(x, group=="compact"))
    return(newcode)
}
datamedian(mpg, hwy, class)

8
liuqiang0704 发表于 2022-4-1 11:58:04
橙红的果士 发表于 2022-3-31 15:21
可以的啊,attach只是将数据集放到全局中去,指定数据集中的变量时不需要指定数据集,不要这句是可以的呀 ...
大佬,这个代码不行呀,还是找不到数据

9
abelus 发表于 2022-4-15 09:00:39

datamedian<-function(data, x, group){
    newcode <- median(subset(data[,x], group==group))
    return(newcode)
}
datamedian(bc, hwy, class)
这种方式应该就可以了。

为啥不是直接
data %>% filter(byvar = grp) %>% median(.$var)
这不是更快直白么
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

10
liuqiang0704 发表于 2022-8-20 07:42:02
abelus 发表于 2022-4-15 09:00
datamedian% median(.$var)
这不是更快直白么
这样也不行。我这是为了设计函数,目前已经解决了。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-21 14:43