【问题标题】:Rhelp : for loop and argumentsRhelp : for 循环和参数
【发布时间】:2015-04-03 20:31:45
【问题描述】:

我想用不同的 varname 值运行大约 50 次这样的事情。

Sls_Other_$varname_y1_12 = diff (Sls_Other_$varname_data [,4] , lag=12)

$varname 应替换为 for 循环每次迭代的顺序列表中的关键字。我试着写这样的东西-

for ( i in 1:nrow(VarCodes) ) {
  nm<-VarCodes[i]
  Sls_Other_$nm_y1_12 = diff (Sls_Other_$nm_data [,4] , lag=12) }

nrow(VarCodes)=50

我确定 $nm 是一个错误的参考。我在互联网上搜索但没有找到任何可以回答这个问题的东西。任何帮助将不胜感激。

【问题讨论】:

  • $ 函数不评估其 RHS 参数的一部分。需要使用“[[”。

标签: r for-loop pass-by-reference


【解决方案1】:

如果你真的确定这会成功:

Sls_Other_$varname_y1_12 = diff (Sls_Other_$varname_data [,4] , lag=12)
# Since the Sls_Other_$varname_data [,4] looks wrong if Sls_Other_ is a dataframe

那么可能是这样的:

for ( i in 1:nrow(VarCodes) ) {
  nm<-VarCodes[i]
  Sls_Other_[[paste0(nm, "_y1_12")]] <-  
                    diff (Sls_Other_[[paste0(nm, "_data")]] [,4] , lag=12) }

【讨论】:

  • 谢谢。这是一个分隔文件,因此 [,4] 有效。但是,我存储列表的方式似乎不正确。以这种方式读取列表的理想格式是什么?我的列表是一个单列文件,有 50 行,是字母数字。
  • 没有称为“分隔文件”的 R 数据结构。您需要在该对象上发布 str()。
  • 我可以使用以下命令读取文件 - Sls_Other_Line_949_data= read.delim("C:/file_path/filename.txt", header=TRUE, sep="|", quote="", dec =“。”)str(VarCodes)'data.frame':49 obs。 1 个变量:$ V1:因子 w/ 49 个级别“BU_601”,“BU_604”,..:1 2 3 4 5 6 7 8 9 10 ...
  • 好的。这使得它(在 R 中)成为“数据框”,并且您不会期望此代码:Sls_Other_$varname_data [,4] 可以被解析器接受,因为 Sls_Other_$varname_data 返回的对象中没有第 4 列。所以你需要用自然语言解释你想让代码做什么......因为你对 R 语言的掌握似乎很初级。
  • 好的。我想我需要多玩一些。我要做的就是以递归方式读取具有相同模式的 50 个唯一变量中的 50 个数据帧的第四列。我的印象是 R 不会与 shell 语法有太大不同。但确实如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多