R 为什么转换会无声地失败?

R 为什么转换会无声地失败?,r,transform,R,Transform,假设我有一个带有日期列的框架: test.frame$alt_dates <- c('2001-01-04', '2001-05-11', '2001-05-14', '2001-07-24', '2003-12-24', '2004-07-21', '2004-10-15', '2004-12-15', '2005-03-17', '2005-07-18') 如果我尝试使用转换将这些日期转换为日期: transform(test.frame, alt_dates <- as.Da

假设我有一个带有日期列的框架:

test.frame$alt_dates <- c('2001-01-04', '2001-05-11', '2001-05-14', '2001-07-24', '2003-12-24', '2004-07-21', '2004-10-15', '2004-12-15', '2005-03-17', '2005-07-18')
如果我尝试使用转换将这些日期转换为日期:

transform(test.frame, alt_dates <- as.Date(alt_dates)

变换(test.frame,alt_dates如@Andrie和@StephanKolassa所说,您需要分配结果。然而,您在使用
转换时犯了另一个错误,该转换恰好在这种情况下起作用,但在几乎任何其他情况下都会咬到您。
如@Andrie和@StephanKolassa所说,您需要分配结果。然而,您是在使用
transform
时又犯了一个错误,这个错误恰好在这种情况下起作用,但在几乎任何其他情况下都会咬到你。
transform()
不会失败。R使用,即函数的参数仅通过值传输-原始对象
测试。帧$alt.dates
不会传输。因此函数不能更改函数的参数。另一种方法是,允许函数在外部范围内修改其参数。在其他编程语言中例如C,通过引用调用是通过向内存地址传递“指针”来完成的

只需将
transform()
的结果分配给原始对象。

transform()
不会失败。R使用,即函数的参数仅通过值传输-原始对象
测试。帧$alt.dates
不会传输。因此函数不能更改函数的参数。另一种方法是,允许函数在外部范围内修改其参数。在其他编程语言中例如C,通过引用调用是通过向内存地址传递“指针”来完成的


只需将
transform()
的结果分配给原始对象。

您需要将
transform(…)
的结果分配给对象,即
test.frame您需要将
transform(…)
的结果分配给对象,即
test.frame我可以告诉您,有些人可能会挑剔您的按值调用语句。:)(我在精神上同意,但细节变得相当复杂。)是的,@joran是正确的。我相信这是一种“参考传递,修改复制”的东西明白了。我在分配结果方面有些茫然,但真正的问题似乎是,在一个有多个因素的数据框架中,我需要在转换语句中使用
=
,而不是
我可以告诉你,有些人可能会根据价值陈述来挑剔你的要求。:(我在精神上同意,但细节变得相当复杂。)是的,@joran是正确的。我相信这是一种“参考传递,修改后复制”的东西明白了。我对分配结果很茫然,但真正的问题似乎是在一个有多个因素的数据帧中,我需要在我的转换语句中使用
=
,而不是
,现在我很尴尬。是的……不分配结果可以解释为什么结果会打印到控制台。很有帮助。有更多的列,所以它仍然有用没有使用->现在我很尴尬。是的…没有分配结果可以解释为什么结果会打印到控制台。很有帮助。有更多的列,所以它仍然不能使用->
transform(test.frame, alt_dates <- as.Date(alt_dates)
test.frame$alt_dates <- as.Date(test.frame$alt_dates)
class(test.frame$alt_dates)
[1] "Date"
test.frame <- transform(test.frame, more_dates <- as.Date(more_dates))
class(test.frame$more_dates)
[1] "character"
test.frame <- data.frame(alt_dates=c('2001-01-04', '2001-05-11', '2001-05-14', 
  '2001-07-24', '2003-12-24', '2004-07-21', '2004-10-15', '2004-12-15', 
  '2005-03-17', '2005-07-18'))
test.frame <- transform(test.frame,alt_dates=as.Date(alt_dates))