请选择 进入手机版 | 继续访问电脑版
楼主: the_fly_winds
5707 18

[有偿编程] R怎么实现动态变量赋值 [推广有奖]

  • 0关注
  • 1粉丝

博士生

5%

还不是VIP/贵宾

-

威望
0
论坛币
1187 个
通用积分
6.3200
学术水平
16 点
热心指数
24 点
信用等级
14 点
经验
2330 点
帖子
105
精华
0
在线时间
257 小时
注册时间
2014-9-28
最后登录
2024-4-11

30论坛币
在一些语言中:
  1. i=1
  2. x&i=3
复制代码
这时你得到了一个新变量x1=3.

如何在R中实现这个语法?

最佳答案

jiangbeilu 查看完整内容

借用一下代码,用最直观的方式告诉你对assign是不是有什么误解?
关键词:新变量

本帖被以下文库推荐

jiangbeilu 学生认证  发表于 2019-1-1 22:15:01 |显示全部楼层 |坛友微信交流群
the_fly_winds 发表于 2019-1-2 22:14
我很清楚我在问什么,你尝试这样的编程,你就知道我在说什么了:
生成x1:x100这100个变量,每一个xi都是 ...
借用一下代码,用最直观的方式告诉你对assign是不是有什么误解?
  1. for (i in 1:100) {
  2.   assign(paste("x", i, sep = ""), (1:i)^2)
  3. }
复制代码

使用道具

jiangbeilu 学生认证  发表于 2019-1-2 09:54:35 |显示全部楼层 |坛友微信交流群
方法1:
  1. assign(paste0('x',i),3)
复制代码


方法2:
  1. x <- vector()
  2. x[i] <- 3
复制代码

已有 1 人评分论坛币 收起 理由
cheetahfly + 10 精彩帖子

总评分: 论坛币 + 10   查看全部评分

使用道具

fyc7346165 发表于 2019-1-2 10:33:17 |显示全部楼层 |坛友微信交流群
  1. name_list <- list("beijing","shanghai","chengdu")
  2. value_list  <- list(120,130,140)
  3. Map(assign, x = name_list, value = value_list, pos = 1)
复制代码
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 精彩帖子

总评分: 论坛币 + 10   查看全部评分

使用道具

fyc7346165 发表于 2019-1-2 10:33
不对,我需要迭代i,assign(paste)只能生成一次变量。也就是说我需要知道在r中怎么连接变量名和一个动态的变量。在x&i中,其他语言可以自行连接,而在R中&表示逻辑运算符不是连接运算符。

使用道具

fyc7346165 发表于 2019-1-2 14:31:51 |显示全部楼层 |坛友微信交流群
the_fly_winds 发表于 2019-1-2 11:53
不对,我需要迭代i,assign(paste)只能生成一次变量。也就是说我需要知道在r中怎么连接变量名和一个动态的 ...
不明白哪里不对了,难道用了R还一定要用&这个符号么?
  1. ## 这是我在三楼写的方法
  2. ## 变量名x1到x10
  3. name_list <- as.list(paste("x", c(1:10), sep = ""))
  4. ## 随机生成一些数字作为value
  5. value_list <- rnorm(10)
  6. Map(assign, x = name_list, value = value_list, pos = 1)

  7. ## 这是二楼的同学提供的方法
  8. for (i in 1:10) {
  9.   assign(paste("x", i, sep = ""), rnorm(1))
  10. }
复制代码
基本上逃不掉assign函数吧
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 30 + 2 + 2 + 2 热心帮助其他会员

总评分: 论坛币 + 30  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

fyc7346165 发表于 2019-1-2 14:59:18 |显示全部楼层 |坛友微信交流群
fyc7346165 发表于 2019-1-2 14:31
不明白哪里不对了,难道用了R还一定要用&这个符号么?基本上逃不掉assign函数吧
修改一下,并不需要将name_list特意转换成list
  1. name_list <- paste("x", c(1:10), sep = "")
  2. value_list <- rnorm(10)
  3. Map(assign, x = name_list, value = value_list, pos = 1)
复制代码

使用道具

hszest 学生认证  发表于 2019-1-2 15:32:35 |显示全部楼层 |坛友微信交流群
the_fly_winds 发表于 2019-1-2 11:53
不对,我需要迭代i,assign(paste)只能生成一次变量。也就是说我需要知道在r中怎么连接变量名和一个动态的 ...
其他语言。。您只会SAS和R了么

使用道具

hszest 学生认证  发表于 2019-1-2 15:35:15 |显示全部楼层 |坛友微信交流群
fyc7346165 发表于 2019-1-2 14:31
不明白哪里不对了,难道用了R还一定要用&这个符号么?基本上逃不掉assign函数吧
回答逻辑是对的,楼主自己没搞清楚

使用道具

hszest 发表于 2019-1-2 15:35
回答逻辑是对的,楼主自己没搞清楚
我很清楚我在问什么,你尝试这样的编程,你就知道我在说什么了:
生成x1:x100这100个变量,每一个xi都是i^2一个序列。例如:
x1=c(1)
x2=c(1,4)
x3=c(1,4,9)
x4=c(1,4,9,16)
这只是一个简单的情形,不能迭代i就没法做下去。你看看assign能不能做。
在VBA中x&i可以引用动态变量,在SAS中x&.i也可以,在Python中,利用'x'+str(i)也引用动态变量,在R中怎么做???

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 04:46