楼主: kaifengedu
6983 22

[问答] 请教list或者data.frame里增加新的变量问题. [推广有奖]

11
jmpamao 发表于 2013-1-17 09:21:18
而Owls$NestNight <- ifelse(Owls$FoodTreatment=="Satiated",paste(Owls$Nest,"1",sep="_"),paste(Owls$Nest,"2",sep="_"))
都有数据ifelse 返回的值 填好 坑, 再赋值给 Owls$nestnight

12
kaifengedu 发表于 2013-1-17 11:52:28
jmpamao 发表于 2013-1-17 09:18
按照你之前的ifelse(...==",,",Owls$Night=paste(), OwlS$Night=paste())
ifelse 语句应该也是 可以这样表 ...
我的理解是Owls$Food是一个长为L=599的向量,它的取值每次都与"Satiated"做一个比较,
比如,第一次如果等于"Satiated",那么Owl$NestNight赋值为Owls$Nest相应的取值加上_1,
反之,Owl$NestNight赋值为Owls$Nest相应的取值加上_2,这样依次进行下去,直到进行了L=599次.
所以也应该给Owl$NestNight赋了599次值.

13
jmpamao 发表于 2013-1-17 21:58:12
x =c(1,1,2,3)
y=c()

ifelse(x==1,y=1,0)
y
NULL

ifelse(x==1,y=1,y=0)
都不行啊~~


14
kaifengedu 发表于 2013-1-18 07:52:07
今天试了几种情形,一一列出讨论一下吧.
用的R版本是2.15.2,编辑器是RStudio最新版.
每换一种方法我都清除了所有变量的额历史记录.

第一种
  1. %第一种方法
  2. x = c(1,1,2,3)
  3. y <- ifelse(x==1, 1, 0)
  4. y
复制代码
显示结果是
  1. > x = c(1,1,2,3)
  2. > y <- ifelse(x==1, 1, 0)
  3. > y
  4. [1] 1 1 0 0
复制代码
第二种
  1. %第二种方法
  2. x = c(1,1,2,3)
  3. ifelse(x==1,y <- 1, y <- 0)
  4. y
复制代码
显示结果是
  1. > x = c(1,1,2,3)
  2. > ifelse(x==1,y <- 1, y <- 0)
  3. [1] 1 1 0 0
  4. > y
  5. [1] 0
复制代码
第三种方法是
  1. %第三种方法
  2. x = c(1,1,2,3)
  3. ifelse(x==1,y = 1, y = 0)
  4. y
复制代码
显示结果是
  1. > x = c(1,1,2,3)
  2. > ifelse(x==1,y = 1, y = 0)
  3. Error in ifelse(x == 1, y = 1, y = 0) :
  4.   formal argument "yes" matched by multiple actual arguments
  5. > y
  6. Error: object 'y' not found
复制代码


第四种方法是
  1. %第四种方法
  2. x = c(1,1,2,3)
  3. ifelse(x==1,y = 1, 0)
  4. y
复制代码
显示结果是
  1. > x = c(1,1,2,3)
  2. > ifelse(x==1,y = 1, 0)
  3. [1] 1 1 0 0
  4. > y
  5. Error: object 'y' not found
复制代码
感觉很明显,第四种方法是不对的,但是为什么第二种和第三种不对呢?
谁能解答一下,谢谢!

15
jmpamao 发表于 2013-1-20 23:07:32
把 ifelse语句中的问题,在https://bbs.pinggu.org/forum.php? ... ;extra=#pid16333808贴中,正好也遇到疑惑的地方,并尝试说明了下,你可以看看, 是否正确,一起讨论撒。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
kaifengedu + 1 + 1 + 1 热心帮助其他会员

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

16
kaifengedu 发表于 2013-1-21 14:50:21
对该例子,根据你的想法,我是这样理解的.
ifelse(Owls$FoodTreatment == "Satiated", Owls$NestNight <- paste(Owls$Nest, "1",sep = "_"),
       Owls$NestNight <- paste(Owls$Nest, "2",sep = "_"))
上述语句,最后应该返回是Owls$NestNight <- paste(Owls$Nest, "2",sep = "_")(因为最后一个比较取值是FALSE),而Owls$Nest又是一个长向量,所以把2重复地赋给Owls$Nest.就给出了前述不正确的结果.

17
jmpamao 发表于 2013-1-21 15:28:12
night赋值跟 ifelse 语句没有一毛的关系。

比如
x = c(1,1,2,1)
ifelse(x==1,night <- 1, night <- 0)
night

赋值可不管 ifelse中 test 最后是T,or F,

18
kaifengedu 发表于 2013-1-22 07:07:45
jmpamao 发表于 2013-1-21 15:28
night赋值跟 ifelse 语句没有一毛的关系。

比如
其实应该还是有关系的,要看是否用到ifelse 函数中的ans[!test & !nas]语句,
比如:
  1. x = c(1,1,1,1)
  2. ifelse(x==1,night <- 1, night <- 0)
  3. night
复制代码
night的值就是1.

19
kaifengedu 发表于 2013-1-22 07:12:08
又看了一下你前面给我链接的帖子.
根据上面的例子,这句话
"只会认后一次的赋值Owls$NestNight <- paste(Owls$Nest, "2",sep = "_"),为最终赋值。 及,为什么都是"_2"  "
的理解是否有问题?

20
jmpamao 发表于 2013-1-22 09:17:11
kaifengedu 发表于 2013-1-22 07:07
其实应该还是有关系的,要看是否用到ifelse 函数中的ans[!test & !nas]语句,
比如:night的值就是1.
看来, 根据 触动了 rep 语句,来决定 赋值情况,有3种情况, 1):只有yes, 赋值运行第1, 2)、有yes, 后no, 赋值 为2。3)、只有NO, 赋值为 2.

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

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