将print语句的输出保存在R中的data.frame中
是否可以将“print”语句的输出保存为R中的data.frame?示例代码为:将print语句的输出保存在R中的data.frame中,r,R,是否可以将“print”语句的输出保存为R中的data.frame?示例代码为: for (i in 1:3){ print(paste(i,i+1,i+2)) } 然后我想将红色圆圈中的数字存储到一个干净的3x3 data.frame中。谢谢 不需要打印 x <- 1:3 y <- x + 1 z <- y + 1 data <- data.frame(x,y,z) data 将print()的结果保存到向量 一系列print()函数的结果可以保存到向量中,如
for (i in 1:3){
print(paste(i,i+1,i+2))
}
然后我想将红色圆圈中的数字存储到一个干净的3x3 data.frame中。谢谢
不需要打印
x <- 1:3
y <- x + 1
z <- y + 1
data <- data.frame(x,y,z)
data
将print()
的结果保存到向量
一系列print()
函数的结果可以保存到向量中,如下所示
x <- 1:3
printouts <- unlist(lapply(x,function(i) print(paste(i,i+1,i+2))))
printouts
将向量转换为数据帧
我们可以使用read.csv()
读取向量并将其转换为数据帧。首先,我们将稍微编辑打印,使其使用逗号而不是空格分隔数据。然后我们将生成打印输出并读取到数据帧中
x <- 1:3
# use comma so we can parse with read.csv
printouts <- unlist(lapply(x,function(i) print(paste(i,i+1,i+2,sep=","))))
diagnostics <- read.csv(text = printouts,header = FALSE)
diagnostics
请注意,可以使用read.csv()
中的col.names=
参数设置更有用的列名
使用多个输入文件的可复制示例
根据对我答案的评论,这里有一个从数据库读取数据的可复制示例,我们将神奇宝贝按代(1-7)划分为文件
我们将读取数据,并将攻击数据大于120的任何神奇宝贝写入日志文件。首先,我们有代码从我的GitHub站点下载zip文件(如果尚未下载)
if(!dir.exists("./pokemonData")){
# download and unzip
download.file("https://raw.githubusercontent.com/lgreski/pokemonData/master/pokemonData.zip",
"pokemonData.zip",
mode="wb")
unzip("pokemonData.zip")
}
接下来,我们将设置一个日志文件,包括覆盖所有以前的副本,以便在写入日志文件时使用cat()
和append=TRUE
logFile <- "./pokemonData/highAttackStat.log"
# erase file in case it already exists, because we'll cat() with append mode
if (file.exists(logFile)) file.remove(logFile)
…以及输出:
> printouts
[1] "1 2 3" "2 3 4" "3 4 5"
>
> head(theSubset)
File Number Name Attack
1 ./pokemonData/gen01.csv 6 CharizardMega Charizard X 130
2 ./pokemonData/gen01.csv 15 BeedrillMega Beedrill 150
3 ./pokemonData/gen01.csv 68 Machamp 130
4 ./pokemonData/gen01.csv 99 Kingler 130
5 ./pokemonData/gen01.csv 112 Rhydon 130
6 ./pokemonData/gen01.csv 115 KangaskhanMega Kangaskhan 125
>
不需要打印
x <- 1:3
y <- x + 1
z <- y + 1
data <- data.frame(x,y,z)
data
将print()
的结果保存到向量
一系列print()
函数的结果可以保存到向量中,如下所示
x <- 1:3
printouts <- unlist(lapply(x,function(i) print(paste(i,i+1,i+2))))
printouts
将向量转换为数据帧
我们可以使用read.csv()
读取向量并将其转换为数据帧。首先,我们将稍微编辑打印,使其使用逗号而不是空格分隔数据。然后我们将生成打印输出并读取到数据帧中
x <- 1:3
# use comma so we can parse with read.csv
printouts <- unlist(lapply(x,function(i) print(paste(i,i+1,i+2,sep=","))))
diagnostics <- read.csv(text = printouts,header = FALSE)
diagnostics
请注意,可以使用read.csv()
中的col.names=
参数设置更有用的列名
使用多个输入文件的可复制示例
根据对我答案的评论,这里有一个从数据库读取数据的可复制示例,我们将神奇宝贝按代(1-7)划分为文件
我们将读取数据,并将攻击数据大于120的任何神奇宝贝写入日志文件。首先,我们有代码从我的GitHub站点下载zip文件(如果尚未下载)
if(!dir.exists("./pokemonData")){
# download and unzip
download.file("https://raw.githubusercontent.com/lgreski/pokemonData/master/pokemonData.zip",
"pokemonData.zip",
mode="wb")
unzip("pokemonData.zip")
}
接下来,我们将设置一个日志文件,包括覆盖所有以前的副本,以便在写入日志文件时使用cat()
和append=TRUE
logFile <- "./pokemonData/highAttackStat.log"
# erase file in case it already exists, because we'll cat() with append mode
if (file.exists(logFile)) file.remove(logFile)
…以及输出:
> printouts
[1] "1 2 3" "2 3 4" "3 4 5"
>
> head(theSubset)
File Number Name Attack
1 ./pokemonData/gen01.csv 6 CharizardMega Charizard X 130
2 ./pokemonData/gen01.csv 15 BeedrillMega Beedrill 150
3 ./pokemonData/gen01.csv 68 Machamp 130
4 ./pokemonData/gen01.csv 99 Kingler 130
5 ./pokemonData/gen01.csv 112 Rhydon 130
6 ./pokemonData/gen01.csv 115 KangaskhanMega Kangaskhan 125
>
我上面的问题是我在实际工作中遇到的问题的一个简化例子。我需要对大量数据集进行循环,其中一些数据集存在问题。我需要确定哪些有问题,然后用“打印(文件号、列号、问题)”之类的东西打印出来。并存储结果。谢谢。在这种情况下,有很多方法可以在循环或
apply()
函数中将内容写入文件。我将发布一些示例代码。@Jeremy-请参阅我的更新答案,其中说明了如何将打印结果写入向量,然后使用read.csv()
@Jeremy()将向量转换为数据帧-更新版本包括通过cat()写入日志文件的代码
。我上面的问题是我在实际工作中遇到问题的一个简单例子。我需要对大量数据集进行循环,其中一些数据集存在问题。我需要确定哪些有问题,然后用“打印(文件号、列号、问题)”之类的东西打印出来。并存储结果。谢谢。在这种情况下,有很多方法可以在循环或apply()
函数中将内容写入文件。我将发布一些示例代码。@Jeremy-请参阅我的更新答案,其中说明了如何将打印结果写入向量,然后使用read.csv()
@Jeremy()将向量转换为数据帧-更新版本包括通过cat()
写入日志文件的代码。