r - 使用双循环添加列
问题描述
我有以下双循环:
indexnames = c(a, b, c, d, etc.)
# with
# length(indexnames) = 87
# class(indexnames) = "character"
# (indexnames = indexes I want to add in a column)
files = c(aname, bname, cname, dname, etc.)
# with
# length(files) = 87
# class(files) = "character"
# (files = name of files in the global environment)
现在我想遍历这两个列表并向文件 [1] 添加名称为“索引”的列和输入索引 [1]。我通过以下方式实现了这一点:
for(i in files){
for(j in indexnames){
files[i] = cbind(Index = indexnames[j], files[i])
}
}
当我运行它时,我收到一条包含 50 条或更多警告的错误消息。我究竟做错了什么?感谢任何帮助,谢谢。
解决方案
您需要使用 get() 和 assign() 函数来获得您想要的行为。
实际上,在创建循环时,您不必在名称元素中使用 i 或 j。如果您以更易于阅读的方式命名循环,则调试循环会更容易。还是让我们看看循环的内部部分。
files[i]
给定文件是一个向量,您不能以这种方式通过它的值调用特定元素(您也不想这样做,因为它只是一个带有对象名称的向量)。而是让“i”循环通过一个数字向量“for(i in 1:87)”
for (index in 1:87) {
assign( files[i] , `[[<-`(get(files[i]), 'index', value = indexnames[i] ))
}
我在这个答案中找到了一些帮助:
推荐阅读
- python - 无法使用 pip 18.1 python 3.7.2 在 Windows 10 中安装 pytest
- iis - 基于 HTTPS 的 IIS URL 重写
- xstate - 在 xState 中将事件从一台机器发送到另一台机器时传递值
- xamarin - 如何在 Xamarin Forms Android 的屏幕上显示通知弹出窗口?
- android - 在 Android 9 中键入时,文本不会出现在 EditText 字段中
- javascript - 内联进度条动画,将触发器更改为从加载滚动?
- plugins - 如何从我的简单 .dart 文件创建插件以在 Flutter 中使用?
- ios - “TWTRInvalidInitializationException” Twitter 登录崩溃应用程序 Ionic 4
- c# - How to group a list so that a single record for a day on a DateTime field is retrived using Linq?
- android - 错误:不兼容的类型:NonExistentClass 无法转换为注解 @error.NonExistentClass()